python正则表达式

正则表达式

正则表达式的元字符

记号说明示例示例解释
literal匹配该字符this匹配this
re1|re2为管道符号,表示多选一wang|guowang或者guo
.除了换行符之外的任意字符a.daad,abd,ad…
\d任意数字同[0-9]和\D是反义词\d{11}表示11位数字
\D非数字字符\D{5}5个非数字字符
\w匹配任意数字和字母同[A-Za-Z0-9]\w+数字和字符构成的字符串均可匹配到
\W匹配非数字字母
\s匹配空白字符符号
\S匹配非空白符号
范围
[…]括号包括的仁和一个字符[aeiou]a,e,i,o,u的任意一个
[x-y]匹配x-y区间内的字符可以有多个区间[0-9匹配所有数字]a-zA-z匹配所有的字母
[^…]不匹配^后面的字符^aeiou不匹配a,e,i,o,u任何一个字母
边界
^匹配行的开始,多行模式(MULTILINE)匹配模式时,可匹配任意行的开头^Dear匹配所有Dear开头的字符
$匹配行的结束,如果最后是一个换行符号以这个换行符号前面的字符为准,多行模式匹配任意行的结尾txt$匹配以txt结尾的字符串
\b匹配单词的边界\bthe\b匹配the不匹配there与together
\A匹配整个字符串的开始,不支持多行模式\Aabc整个字符串abc开头匹配不上xyz\nabc
\Z仅匹配整个字符串的结束,不支持多行模式匹配def\Z整个字符串匹配以def结尾。匹配不上def\nxyz
次数
*前面的内容出现零到多次5*0个或多个5
+内容前面出现1次到多次a+1个或多个a
前面内容出现0次或1次N?0或1个N
{N}前面内容出现N次X{5}5个X
{M,N}前面出现M次到N次W{2,5}2到5个W
非贪婪
(次数)?(*|+|?|{})?次数后面加问号表示非贪婪匹配,即找出长度最小切符合要求的“.+?”匹配引号引起来的部分,比如“a”,“b”,“c”,如果左边的正则表达式中没有问好,则会贪婪匹配整个字符串。但是左边的正则表达式中有问好只会匹配“a”,“c”
子组
(正则表达式)圆括号中匹配的内容会保留为子组(或者称为子模式)([0-9]{3})连续三个数字构成一个子组
(?P<name>...)明明的子组?P<name>\w+子组的名字叫做name
\子组编号匹配已保存的子组,参考上面的(正则表达式)(\w)\1两个词连续出现
(?:)虽然用括号括起来不算子组(?:beijing|xiangtan)universitebeijing university或xiangtan university
\取消通配符的特殊含义\.匹配字符.本身

正则表达式核心函数

方法说明
re.compile(pattern)返回一个regex对象
若用regex对象,一下pattern参数不需要传入re.compile(pattern.match(string))
re.match(pattern,string)匹配(从字符串的开头开始)
re.search(pattern,string)搜索(在字符串中找有没有符合的字符串)
re.findall(b )找出所有返回列表
re.split(pattern,string,max = 0)符合pattern处进行分割,返回列表,max可以指定最多分割的次数
re.sub(pattern,repl,string,max = 0)字符串替换,把string中符合pattern的部分替换成repl字符串
re.subn(re.sub(pattern,repl,string,max = 0))和上面re.sub类似但是多返回一个次数
  • 引入正则表达式模块
import re
a = re.match(r'\d{3}','12345a6789')
a
<re.Match object; span=(0, 3), match='123'>
a = re.search(r'\d{3}','123456789')
print (a)
<re.Match object; span=(0, 3), match='123'>
a = re.findall(r'\d{11}','asd123456789123sdf')
print(a)
['12345678912']
a = re.split(r'\d','asdf3a54er')
a
['asdf', 'a', '', 'er']
a = re.sub(r'\d','0','a1b2c3')
a
'a0b0c0'
re.sub(r'(\w+)\1',r'\1','the the little cat in the the hat')
#\w+表示一个单词,在第一个括号中基座子组1,可以用\1表示后面的\1表示这个单词重复的一次通过sub将重复的单词替换一次
'the the litle cat in the the hat'
#不保存子组的示例
re.findall(r'(?:beijing|zhejiang)','beijing & zhejiang')
['beijing', 'zhejiang']

理解贪婪和非贪婪

s = '<string>Weizhong Tu</string><string>Python is interesting</string>'
pattern = "<string>(.+)</string>"#括号代表里面的内容保存为子组
reg = re.compile(pattern)
print(reg.findall(s))
#这并不是我们想要的结果,所以贪婪模式下会匹配更多的内容
['Weizhong Tu</string><string>Python is interesting']
pattern = "<string>(.+?)</string>"#括号代表里面的内容保存为子组
reg = re.compile(pattern)
print(reg.findall(s))
#非贪婪模式下我们就可以得到我们想要的内容
['Weizhong Tu', 'Python is interesting']
  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值