python正则随记

表1. 正则元字符和语法

符号说明实例
.表示任意字符,如果说指定了 DOTALL 的标识,就表示包括新行在内的所有字符。‘abc’ >>>‘a.c’ >>>结果为:‘abc’
^表示字符串开头。‘abc’ >>>’^abc’ >>>结果为:‘abc’
$表示字符串结尾。‘abc’ >>>‘abc$’ >>>结果为:‘abc’
*, +, ?'*‘表示匹配前一个字符重复 0 次到无限次,’+‘表示匹配前一个字符重复 1次到无限次,’?'表示匹配前一个字符重复 0 次到1次‘abcccd’ >>>‘abc*’ >>>结果为:‘abccc’
‘abcccd’ >>>‘abc+’ >>>结果为:‘abccc’
‘abcccd’ >>>‘abc?’ >>>结果为:‘abc’
*?, +?, ??前面的*,+,?等都是贪婪匹配,也就是尽可能多匹配,后面加?号使其变成惰性匹配即非贪婪匹配‘abc’ >>>‘abc*?’ >>>结果为:‘ab’
‘abc’ >>>‘abc??’ >>>结果为:‘ab’
‘abc’ >>>‘abc+?’ >>>结果为:‘abc’
{m}匹配前一个字符 m 次‘abcccd’ >>>‘abc{3}d’ >>>结果为:‘abcccd’
{m,n}匹配前一个字符 m 到 n 次‘abcccd’ >>> ‘abc{2,3}d’ >>>结果为:‘abcccd’
{m,n}?匹配前一个字符 m 到 n 次,并且取尽可能少的情况‘abccc’ >>> ‘abc{2,3}?’ >>>结果为:‘abcc’
\对特殊字符进行转义,或者是指定特殊序列‘a.c’ >>>‘a.c’ >>> 结果为: ‘a.c’
[]表示一个字符集,所有特殊字符在其都失去特殊意义,只有: ^ - ] \ 含有特殊含义‘abcd’ >>>‘a[bc]’ >>>结果为:‘ab’
|或者,只匹配其中一个表达式 ,如果|没有被包括在()中,则它的范围是整个正则表达式‘abcd’ >>>'abc
( … )被括起来的表达式作为一个分组. findall 在有组的情况下只显示组的内容‘a123d’ >>>‘a(123)d’ >>>结果为:‘123’
(?#…)注释,忽略括号内的内容 特殊构建不作为分组‘abc123’ >>>‘abc(?#fasd)123’ >>>结果为:‘abc123’
(?= … )表达式’…’之前的字符串,特殊构建不作为分组在字符串’ pythonretest ’中 (?=test) 会匹配’ pythonre ’
(?!..)后面不跟表达式’…’的字符串,特殊构建不作为分组如果’ pythonre ’后面不是字符串’ test ’,那么 (?!test) 会匹配’ pythonre ’
(?<= … )跟在表达式’…’后面的字符串符合括号之后的正则表达式,特殊构建不作为分组正则表达式’ (?<=abc)def ’会在’ abcdef ’中匹配’ def ’
(?:)取消优先打印分组的内容‘abc’ >>>’(?:a)(b)’ >>>结果为’[b]’
?P<>指定Key‘abc’ >>>’(?Pa)>>>结果为:groupdict{n1:a}

表2.特殊序列

特殊表达式序列说明
\A只在字符串开头进行匹配。
\b匹配位于开头或者结尾的空字符串
\B匹配不位于开头或者结尾的空字符串
\d匹配任意十进制数,相当于 [0-9]
\D匹配任意非数字字符,相当于 [^0-9]
\s匹配任意空白字符,相当于 [ \t\n\r\f\v]
\S匹配任意非空白字符,相当于 [^ \t\n\r\f\v]
\w匹配任意数字和字母,相当于 [a-zA-Z0-9_]
\W匹配任意非数字和字母的字符,相当于 [^a-zA-Z0-9_]
\Z只在字符串结尾进行匹配

说明:

  1. 在python中的re模块中正则的通常写法采用原始字符串形式(raw string):

      a = 'one1two2three3four4'
      ret = re.findall(r'(\d+)',a)
    
  2. 符号说明:
    列子1:

     string1 = "python 是一种 编程  language 吗?  是  | 不是  aaaaaa";
     list4 = re.findall("([^是yg]+)", string1);
     #在[  ]里面的字符会分开一一与字符串匹配
     #假设'是[yg]'会解析匹配为'是y','是g'分别去匹配
     #在[   ]中的^表示不匹配后面接入的字符   [^…] 不在[]中的字符:[^abc] 匹配除了a,b,c之外的字符。
     结果:
     ['p', 'thon ', '一种 编程  lan', 'ua', 'e 吗?  ', '  | 不', '  aaaaaa']
    

    列子2:

     a = "python java C++ js html GO";
     list4 = re.findall(r'n(.*)l', a);#  会匹配首尾字符 根据中间括号中的字符串比对输出
     print(list4)
     list4 = re.findall(r'(.*)', a);
     print(list4)
     list4 = re.split(r'n(.*)l', a, 1);
     print(list4);
     list4 = re.split(r'n (j)a', a);#  去掉括号外面相同的字符,根据括号里面的字符匹配分组
     print(list4);
     结果:
     [' java C++ js htm']
     ['python java C++ js html GO', '']
     ['pytho', ' java C++ js htm', ' GO']
     ['pytho', 'j', 'va C++ js html GO']
    
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值