re模块

---恢复内容开始---

1.正则表达式元字符和使用方法:
  #* 表示重复匹配前一个字符 0次到无限次:指定的字符出现0次到多次,意思是说,这个字符没有匹配上也算匹配成功,但结果为:''
#+ 表示重复匹配前一个字符 1 次到无限次:指定的字符出现1次到多次,意思是说,这个字符必须得有才能算匹配成功,
  #匹配前一个字符:a* 表示*号前面的字符,也就是a
  #直接匹配:'abc' >> 'abc' >结果:'abc'
符号说明使用案例
.通配符,匹配任意字符'abc'  > 'a.c'  >>结果:'abc'
*, +,?

贪婪匹配(多吃字符):* 表示重复匹配前一个字符 0次到无限次,+ 表示重复匹配前一个字符 1 次到

无限次,'?' 表示重复匹配前一个字符0 到 1 次

'aaab' > 'a*' >>结果为: 'aaa'

'aaab' > 'a+'  >>结果为:'aaa'

'abcccd'  > 'abc?'  >>结果为:'abc'

 *?,+?,?? 非贪婪匹配,少吃字符 'abc' > 'abc*?' >>结果为: 'ab'

'abc' > 'abc+?'  >>结果为:'abc'

'abcccd'  > 'abc??'  >>结果为:'ab'

 {m} 匹配前一个字符m次 'abcccd' > 'abc{2}' >> 结果: abcc
 {m,n} 匹配前一个字符m到n次 'abcccd' > "abc{1,3}" >>结果abccc
 {m,n}? 匹配前一个字符m到n次,匹配最少的次数'abccc' > 'abc{1,3}'  >>结果 abc
 \   转义字符,对特殊字符进行转义 'a.c' > 'a\.c'  > 结果 a.c
[]字符集,特殊字符在里面都会失去特殊意义,但:^ , - , ], \ 有特殊含义

'abcd' > 'a[bc]d' >结果 :[]

'abcd' > 'a[bc]' >结果 :ab

'acbd' > 'a[bc]' >结果 :ac

|或,注意:如果|没有在 ()内,则它的范围是整个正则表达式

"abba" > "ab|ac" >结果: ab

(....)被括号括起来的表达式作为一个分组

'qqa12s' > 'a(\d+)s' >结果:12

(?#...)忽略括号内的内容,特殊构建但不作为分组

'abcaaa123' >'abc(?#aaa123)123'

(?=...)之后的字符串内容需要匹配表达式才能成功匹配

'abcjbzd'  > 'abc(?=jbzd)' > abc

只匹配(?=...)之前的字符

(?!...)之后的字符串内容需要不匹配表达式才能成功匹配

'aa1' > aa(?!\d) > []  

'aad' > aa(?!\d) > aa

(?<=..)之前的字符串内容需要匹配表达式才能算成功匹配

'<aad'  >> ' (?<=<)aa'   > aa

(?<!...)之前的字符串内容需要不匹配表达式才能算成功匹配

'ssadc' >> '(?<!\s)adc'  > adc

(?P=name)引用别名为<name>的分组匹配到的字符串 
(?:)()的不分组版本,用于使用 '|'或者后接数量词'abcabc' > '(?:abc){2}' > 'abc', 'abc'

 预定义字符集(可以写在字符集中[....])

\d等同于:[0-9]'as123d' > '\d'  >'1','2','3'
\D匹配非数字,等同于[^\d]'a123d' > '\D'  > 'a' , 'd'
\s匹配空白字符:[\t\r\n\f\v],空格'a c'  > '\sc' > ' c'
\S匹配非空白字符: [^\s]'abc' > '\Sc' > 'bc'
\w匹配单词字符 [ a-zA-Z0-9_ ]'abc' > 'a\wc' > 'abc'
\W匹配非单词字符  等同于 [^\w]'a.c' > '\wc' > '.c'

匹配边界(不消耗待匹配字符串中的字符)

    

^表示匹配字符串的开头,它以至少单个字符至整个字符串作为开头

'abc' > '^abc' >>结果: 'abc'

'abc' > '^a'  >>结果:'a'

$ 匹配字符串末尾

'abc' > 'abc$'  >>结果:'abc'

'abc' > 'c$'  >>结果:'c'

\A

仅匹配字符串开头

'abc'  > '\Aabc'  >> 'abc'

'abc'  > '\Ab'   >> []

'abc'   > '\Aa' >> a

\Z

仅匹配字符串末尾

'abc'  > 'abc\Z' >> 'abc'

'abc'  > 'c\Z' >> 'c'

'abc'  > 'b\Z' >> []

\b

匹配\w和\W之间

'a!c'   > '\b!c' >> '!c'

 

 Re模块:

  

re.I :忽略大小写
re.M :多行模式,改变'^'和'$'的行为
re.S :点任意模式
re.X :详细模式
re.complit(),生成一个正则表达式对象,然后调用正则表达式的相应方法。好处就是生成的正则对象可以多次使用
  str1 = re.complit('\w')
  str2 = str.match('abc')

#pattern:正则模型 ,string:字符串 , falgs:匹配模式
re.match(正则模型,字符串),从字符串的开始位置匹配,如果不是开始位置,匹配失败返回None
  re.macth('tom','tom is 1.7 metres tall').group(0)
  >>> tom
re.search(正则模型,字符串,匹配模式):从整个字符串内匹配,只要匹配成功第一次,就返回结果。否则,如果字符串没有匹配,返回None

X:match和search返回的是一个 match object对象,该对象有这么多个方法:
  object.group(m,n) 返回组号所匹配的字符串,如果不存在,报indexError异常,默认为0
  object.start() 返回匹配开始的位置
  object.end()  返回匹配结束的位置
  object.span()  返回一个元祖,记录匹配字符的 开始,结束 的位置
  
re.search('([a-z]*)([0-9]*)','aa12').group(0) > aa12
re.search('([a-z]*)([0-9]*)','aa12').group(1) > aa
re.search('([a-z]*)([0-9]*)','aa12').group(2) > 12

match和search的不同:
  match只匹配字符串开头,而search从整个字符串内匹配,只匹配一次
#pattern:正则模型  ,string:字符串   , falgs:匹配模式
re.findall(正则模型,字符串,匹配模式),遍历匹配,只要字符串内的字符符合正则规则,返回一个列表
str1 = My name is chang quan egg 17 day
re.findall('\d',str1)
>>> ['1','7']
#pattern:正则模型  ,string:字符串   , falgs:匹配模式
re.finditer(),也是遍历匹配,但把成功匹配的字符串(match object)以迭代器返回
str1 = re.finditer('\d','day 952')
>>> <callable_iterator object at 0x0000016656F416A0>
for s in str1:
  print(s) >>> <_sre.SRE_Match object; span=(4, 5), match='9'>
  print(s.group()) >>> 9,5,2
  print(s.span())
  >>>(4(下标),5(位置))
  

 

re.split(pattern,string),字符串按照匹配规则进行分割,返回一个列表
re.split('\w','123s456b789')
>>> [123,456,789]
re.sub(pattern, repl,string,count) 符合匹配规则的string的子串进行替换,返回替换后的字符串
re.sub('\W','-',aa==bb==cc==hello')
>>> aa-bb-cc-hello

#替换次数
re.sub('\W','-',aa==bb==cc==hello',1)
>>> aa-=bb==cc==hello

总结:match,search,findall的不同:
  match:只匹配字符串的开头,匹配失败返回NOne
  search: 匹配整个字符串,匹配到第一个结果后,匹配结束
  findall:遍历匹配,字符串内有多少符合正则规则的就匹配多少,返回一个列表

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

---恢复内容结束---

转载于:https://www.cnblogs.com/leixiansheng6f6/p/9205389.html

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值