正则使用注意事项

来源:互联网 发布:一建试题软件 编辑:程序博客网 时间:2024/05/22 00:52

字符相关

[ ] 内 元字符 不需要转义,但 - 和 + 号一定要转义

[ ] 内不管给出多少字符串,仅匹配一个字符

[^c-z] 脱字符只能放在最前面
  []内表示匹配非集合内的字符串
  []号外表示字符串开头

表达式中不要随便加空格

能用 * + ? 时,不要用{0,9};
  正则会对元字符 * + ? 进行优化,提高效率

{1,9} 和 {9} 的区别,前者表示1到9之间都有,而后者表示必须是9个

[1-254] 不可能实现IP匹配
[0-9][0-5][0-4] 因为正则中最大的数字是9

【?非贪婪模式】
  * + ? 限定符
  都是贪婪的,因为它们会尽可能多的匹配文字,只有在它们的后面加上一个?就可以实现非贪婪或最小匹配

\A==^ \Z==$ 不匹配字符,仅用于定位

_两边不是单词边界

findall方法内的子组: 单个子组直接返回,多个子组以元祖形式返回

(?:…) 非捕获组【注意在 findall 方法下与(…..)的区别】
  (?:….) 显示所有匹配到的内容
  (……) 仅显示括号内匹配到的内容

Python里数量词默认是贪婪的,总是尝试匹配尽可能多的字符;

假如需要匹配文本中的字符”\”,正则表达式里将需要4个反斜杠”\\\\”


中括号注意事项

sa = 'lvbu'stra = re.findall(r'[\w+]', sa)print(stra)# ['l', 'v', 'b', 'u']strb = re.findall(r'\w+', sa)print(strb)# ['lvbu']

中括号内用 + 号和在外用 + 号得到不一样的结果


边界符注意事项

在用  \b  时,必须加 r
  在python字符串中,”b”是反斜杠字符,ASCII值是8。如果你没有使用 原始字符串(raw strings) 时,那么 Python 将会把 “\b” 转换成一个回退符,RE 将无法匹配到你所希望的。

print( re.search(r'er\b', 'never') )# <_sre.SRE_Match object; span=(3, 5), match='er'>print( re.search('er\b', 'never') )# Noneprint( re.search(r'er\B\w', 'nerev') )# <_sre.SRE_Match object; span=(1, 4), match='ere'>