python 正则表达式使用(补充菜鸟文档)

正则简介:

正则表达式并不是Python的一部分。正则表达式是用于处理字符串的强大工具,拥有自己独特的语法以及一个独立的处理引擎,效率上可能不如str自带的方法,但功能十分强大。基本上主流的语言都支持正则

概述

大多数初学者都认为正则很难,实际上并不是这样的,语法不多,不经常用还会时常忘记,先说一下难点在于排他性、全面性、 匹配一个想要的字段,实际并不难

正则表达式匹配原则
	1.正确性,能够正确的匹配出目标字符串怕
	2.排他性,除了目标字符串之外尽可能少的匹配其他内容.
	3.全面性,尽可能考虑到目标字符串的所有情况,不遗漏. .

下面是我的学习总结

使用

入门尝试

import re #导入正则第三方包
str='127.0.0.1:8080'
restr=re.findall('8080',str)
#
print(restr)
#输出:['8080']
restr2=re.findall(r':(\w+)',str)
print(restr2)
#输出:['8080']

从上面可以看出不同语法也能实现相同的效果

下面先说一些奇怪的法则,避免变异混淆

1.转义字符:. * + ? $ [ ]( )| \ (不包括【:】)

匹配上述字符需加 \ 进行转义
在使用python中使用正则匹配规则,前可以加r 表示元字符及(本身的含义)
在开发中避免错误 直接在规则前加r

import re #导入正则第三方包
str = '38$513.36'
spstr1 = re.findall('$', str)  # 结果:['']
spstr2 = re.findall('\$', str)  # 结果:['$'] 如果是pycharm的编译是会通过的,但有警告
spstr3 = re.findall('\\$', str)  # 结果:['$']
spstr4 = re.findall(r'\$', str)  # 结果:['$']
print(spstr1)
print(spstr2)
print(spstr3)
print(spstr4)
2.贪婪模式和非贪婪模式: ?

默认情况下是贪婪模式及(尽可能大的匹配内容 )
非贪婪模式:在匹配重复元字符后加’?'号即可
重复字符:+ * ? {m,n} 后面加 ? 可尽可能少的匹配内容

str="ababababababababababa"
strstr1=re.search('(ab){1,3}',str)
strstr2=re.search('(ab){1,3}?',str)#关闭贪婪模式
print(strstr1)#<re.Match object; span=(0, 6), match='ababab'>
print(strstr2)#<re.Match object; span=(0, 2), match='ab'>
3.分组 () 让操作对象当做一个整体
   str='asasasaasasa'
   s=re.search(r'(王|李)\w{1,2}',"王者农药").group() #(参数) 充当一个条件
   print(s)#王者农
 其中{1,2} 针对\w生效,因为(王|李) 是一个条件 而{n,m} 只针对前一个条件生效

\w{1,2}

定义
	在正则表达式中,以()建立正则表达式的内
	部分组,子组是正则表达式的一部分,可以
	作为内部整体操作对象。
作用
	1.可以被作为整体操作,改变元字符的操作对象
	2.可以通过编程语言某些接口获取匹配内容
	   中,子组对应的内容部分 .group()
       re. search(r' (ab)cd' , "abcd") group(1) #'ab'
捕捉组: 为分组起名字
s=re.search(r'(?P<test>王|李)\w{1,2}',"王者农药").group('test')#王

	4.注意事项
	●一个正则表达式中可以包含多个子组
	●子组可以嵌套,但是不要重叠或者嵌套结构复杂
	●子组序列号一般从外到内,从左到右计数

flags 的使用 用于选择性编码在这里插入图片描述

#只能匹配ascii码字符regex = re. compile(r’\W+’ , flags =re.A)
IGNORECASE匹配忽略字母大小写regex = re. compile(r’ [a-z]+'flags=re.I)
DOTALL使.可以匹配换行regex =re. compile( r’.+'1flags=re.S )
MULTILINE使^ $可以匹配每–行的开头结尾位置regex = re. compile(r’\W+’ , flags =re.M)
VERBOSE为正则添加注释regex = re. compile(r’\W+’ , flags =re.X)

正式开讲

参考地址:菜鸟

模式描述
^匹配字符串的开头位置 ^janekia$ 绝对匹配。
$匹配字符串的末尾位置。
.匹配任意字符,除了换行符。
[…]用来表示一组字符,单独列出:[amk] 匹配 ‘a’,‘m’或’k’
[abc#!好]表示0中的任意-个字符
[0-9],[a-z],[A-Z]表示区间内的任意-个字符
[ #?0-9a-z]混合书写, - -般区间表达写在后面
re*匹配 前一个条件0个或多个。
匹配规则:匹配前面的字符出现0次或多次
[A-Z][a-z]* 指定前一个条件出现的次数0次或多次
?(0,1) < +(1,n) < *(0,n) 利用数学集合范围进行记忆 n代表多次
[^…]不在[]中的字符:[^abc] 匹配除了a,b,c之外的字符。个的表达式。
re+匹配1个或多个的表达式。
re?匹配0个或1个由前面的正则表达式定义的片段,非贪婪方式
re{ n}匹配n个前面表达式。例如,"o{2}“不能匹配"Bob"中的"o”,但是能匹配"food"中的两个o。
re{ n,}精确匹配n个前面表达式。例如,"o{2,}“不能匹配"Bob"中的"o”,但能匹配"foooood"中的所有o。"o{1,}“等价于"o+”。"o{0,}“则等价于"o*”。
re{ n, m}匹配 n 到 m 次由前面的正则表达式定义的片段,贪婪方式
a | b匹配a或b
(re)匹配括号内的表达式,也表示一个组
(?imx)正则表达式包含三种可选标志:i, m, 或 x 。只影响括号中的区域。
(?-imx)正则表达式关闭 i, m, 或 x 可选标志。只影响括号中的区域。
(?: re)类似 (…), 但是不表示一个组
(?imx: re)在括号中使用i, m, 或 x 可选标志
(?-imx: re)在括号中不使用i, m, 或 x 可选标志
(?#…)注释.
(?= re)前向肯定界定符。如果所含正则表达式,以 … 表示,在当前位置成功匹配时成功,否则失败。但一旦所含表达式已经尝试,匹配引擎根本没有提高;模式的剩余部分还要尝试界定符的右边。
(?! re)前向否定界定符。与肯定界定符相反;当所含表达式不能在字符串当前位置匹配时成功。
(?> re)匹配的独立模式,省去回溯。
\w匹配数字字母下划线
\W匹配非数字字母下划线
\s匹配任意空白字符,等价于 [\t\n\r\f]。
\S匹配任意非空字符
\d匹配任意数字,等价于 [0-9]。
\D匹配任意非数字
\A匹配字符串开始
\Z匹配字符串结束,如果是存在换行,只匹配到换行前的结束字符串。
\z匹配字符串结束
\G匹配最后匹配完成的位置。
\b匹配一个单词边界,也就是指单词和空格间的位置。例如, ‘er\b’ 可以匹配"never" 中的 ‘er’,但不能匹配 “verb” 中的 ‘er’。
\B匹配非单词边界。‘er\B’ 能匹配 “verb” 中的 ‘er’,但不能匹配 “never” 中的 ‘er’。
\n, \t, 等。匹配一个换行符。匹配一个制表符, 等
\1…\9匹配第n个分组的内容。
\10匹配第n个分组的内容,如果它经匹配。否则指的是八进制字符码的表达式。

比较常用的标出来了 大写字母在有一对的情况下
大写一般代表取反()
小写这代表正常

常用函数

函数名描述
findall匹配所有字符 有返回字符集,无返回空字符集表达式有子组则只能获取到子组对应的内容
re.findall(string[, pos[, endpos]])
search整个字符串查找一处没有返回None
re.search(pattern, string, flags=0)
sub查用于替换字符串的匹配项 默认替换最大值
re.sub(pattern, repl, string, count=0, flags=0)
subn查用于替换字符串的匹配项 默认替换最大值
re.sub(pattern, repl, string, count=0, flags=0)
基本和sub一样 区别在于 返回值中会出现具体替换次数
finditer匹配的所有子串,并把它们作为一个迭代器返回
re.finditer(pattern, string, flags=0)开始匹配字符串 无返回None
compile生成正则表达式对象 rege对象
re.compile(pattern[, flags])
splitsplit 方法按照能够匹配的子串将字符串分割后返回列表
re.split(pattern, string[, maxsplit=0, flags=0])
参数说明pattern 正则表达式
replace替换的字符串
string目标字符串
max 最多替换几处,默认替换全部
flags功能标志位,扩 展正则表达式的匹配
返回值:替换后的字符串

扩展

regex对象的使用:一般是

在这里插入图片描述

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值