正则表达式 1

118 阅读2分钟

本文已参与「新人创作礼」活动,一起开启掘金创作之路

概念

正则表达式是可以选择含有某种格式的文本。它用一定的语句匹配符合一定规则的字符串。

正则表达式中的字符

元字符 metacharacter

  1. \b 匹配一个位置,单词的前 / 后 边界
  2. \d 匹配数字 [0 - 9]
  3. \D 匹配非数字的字符 [^0-9]
  4. \w 匹配数字[0-9],字母[a-zA-Z],下划线_,汉字,其他语言
  5. \W 匹配除4以外的任意字符
  6. . 除换行符以外任意字符
  7. \s 匹配任意的空白符
  8. \S匹配非空白
  9. % 匹配字符串结尾
  10. \f \n \r \t 匹配换页,换行,回车,制表符

[XXX]

  1. [abc] 匹配a,b,c中的任意一个字符
  2. [a-z] 匹配a-z的任意一个字符
  3. [a-zA-Z]匹配a-z和A-Z的任意一个字符
  4. 字符前加 ^ 表示不在后面规定的范围内的字符

限定符(表示数量,出现次数)

  1. * 左边的字符可以出现任意次(包括0次)
  2. +左边的字符可以出现任意次(不包括0次)
  3. \?左边的字符可以出现 0 次或 1 次
  4. {m} m ≥ 0 左边的字符出现m次
  5. {m,} m ≥ 0 左边的字符出现 ≥m 次
  6. {m,n} m,n ≥ 0 左边的字符出现 m~n次(包括 m 和 n) 注:单独的 ? 跟在这几个符号后表示贪婪模式,即该范式尽可能少的出现。例如对于字符串"abbb","ab+"匹配所有b,而加入?后,即"ab\*?"匹配一个b

使用时,一般可以将限定符放到元字符的后面,表示前面的某个元字符重复几次。

边界,不匹配字符

\A \Z 字符起始 结束位置 ^ $ 字符起始 结束位置(包括\t \n之后的起始 结束位置)

分组(XXX)

1.括号里的是一个分组。如果有多个分组,从左到右从1开始编号。 2.括号后 \i 或 r'\i 要求前面的字符后跟着 i 号分组在本次匹配到的值,少一个字符都无法运行出来。

q = '(((mn+)o)p)\\1'  #r'(((mn+)o)p)\1'
x2= re.match(q,'mnnnnopmnnnnop')
print(x2.group())
# mnnnnopmnnnnop

\1 表示再完全重复一遍第一个分组。少一个 n 都不能完全运行出来。

3.分组后可以加量词。但是每次匹配的模式可以不同。

r = '(((mn*)o)+p)'
x3 = re.match(r,'mnomnnomnnnopuh')
print(x3.group())
# mnomnnomnnnop

例如加上量词 + 可以看到每次不一定要匹配的n的个数相同。不同于上一种情况。