正则跟re模块内容2020年8月16日

re模块

[字符组] #在同一个位置上可能出现的各种字符组成一个字符组。

字符:

.   匹配除换行符以外的任意字符(一个字符)

\w 匹配字母或数字或下划线

\s 匹配任意的空白符 tab,空格等)

\d 匹配数字

\n   匹配一个换行符

\t 匹配一个制表符

\b 匹配一个单词的结尾(需要指定结尾的字符)

^ 匹配字符串的开始(写在开头)

¥ 匹配字符串的结尾(写在结尾)

\W 匹配非字母或非数字或非下划线

\D 匹配非数字

\S 匹配非空格符

a|b   匹配字符a或b (优先匹配左边)

() 匹配括号内的表达式,也表示一个组。(对整体进行量词约束)

[...] 匹配字符组中的字符

[^...] 匹配除了字符串中字符的所有字符

 

量词:

* 重复零次或更多次

+ 重复一次或更多次

? 重复零次或一次

{n} 重复n次

{n,} 重复n次货更多次

{n,m} 重复n到m次

 

匹配是贪恋匹配,尽可能多的匹配到,如果后面加上?则会变成非贪婪匹配,最小匹配。

 

转义符:

r’\n’ #前面的r表示不需要转义  

 

re.findall(‘正则’,‘字符串’)  #查找出所有的匹配项,并返回成列表

  ret = re.findall(‘www.(baidu|oldbody).com’,’www.oldbody.com’)

  输出会是 oldbody,因为正则里的()分组的原因,如要打印所有,需要在条件中修改成:www.(?:baidu|oldbody).com

re.search(‘正则’,‘字符串’)  #查找,无返回空,有则返回包含匹配信息的对象(找到第一个就返回),需要用  返回值.group() 来打印结果。

re.match(‘正则’,‘字符串’)  #必须从头开始匹配。同样返回需要用group()来显示。匹配不上则返回None。

 

re.split(‘正则’,‘字符串’)  # [ab] 分隔 babcd,先用a分隔,再用b对后面的进行分隔。分隔时,如果前面没有元素,则用空填补。

     如果正则变成分组,将会保留分隔标识,标识自成一个元素

re.sub(‘\b’,’H’,’abcd1hasd’,1)  #把字符串中的数字(\b)替换成H,只替换一个。默认是全部替换。

re.subn(‘\b’,’H’,’abcd1hasd’)  #返回替换的结果跟替换的次数,结果是一个元组。

 

obj = re.compile(‘\b{3}’) #将正则表达式编译成一个正则表达式对象。

ret = obj.search(‘abdedf122agcd’) #正则表达式对象调用search,参数为待匹配对象。

 

<(?P<tag_name>\w+)>\w+</(?P=tag_name)>    <h1>hello</h1>

后面的tag_name 为引用分组,表示跟前面的匹配内容一致。

(?P<id>\b)     ?P<id> 给这个分组起名字为id,用group()索引时可以用id来查找。

.group(‘tag_name’)  #返回 h1         

.group()           #返回  <h1>hello</h1>

re.search(r”<(\w+)>\w+</\1>”,”<h1>hello</h1>”)  #\1表示第一个分组

 

ret = re.finditer(‘\d’,’adef2fad3fadfa’) #返回一个存放匹配结果的迭代器

for I in ret:

         print(i.group())      #需要group()来看结果。

需要group()出结果的,正则如果分组,将会自动变成多个输出,用group的参数控制当索引进行输出。

 

flag

re.I       #忽略大小写

re.m       #多行模式,改变^和$的行为

re.S        #点可以匹配任意字符,包括换行符

re.L        #做本地化识别的匹配,表示特殊字符集\w,\W,\b,\B,\s,\S依赖当前环境,不推荐使用。

re.U      #使用 \w \W \S \s \d \D取决于unicode定义的字符属性,python3中默认使用该flag

re.x         #冗长模式,该模式下pattern字符串可以是多行的,忽略空白字符,并可以添加注释。

 

|  (或)  #从左往右匹配,匹配上就不继续匹配了,所以应该把长的放前面。

 

posted @ 2020-08-16 12:48  济宁爱学习  阅读(111)  评论(0编辑  收藏  举报