本文已参与「新人创作礼」活动,一起开启掘金创作之路
概念
正则表达式是可以选择含有某种格式的文本。它用一定的语句匹配符合一定规则的字符串。
正则表达式中的字符
元字符 metacharacter
- \b 匹配一个位置,单词的前 / 后 边界
- \d 匹配数字 [0 - 9]
- \D 匹配非数字的字符 [^0-9]
- \w 匹配数字[0-9],字母[a-zA-Z],下划线_,汉字,其他语言
- \W 匹配除4以外的任意字符
- . 除换行符以外任意字符
- \s 匹配任意的空白符
- \S匹配非空白
- % 匹配字符串结尾
- \f \n \r \t 匹配换页,换行,回车,制表符
[XXX]
- [abc] 匹配a,b,c中的任意一个字符
- [a-z] 匹配a-z的任意一个字符
- [a-zA-Z]匹配a-z和A-Z的任意一个字符
- 字符前加 ^ 表示不在后面规定的范围内的字符
限定符(表示数量,出现次数)
- * 左边的字符可以出现任意次(包括0次)
- +左边的字符可以出现任意次(不包括0次)
- \?左边的字符可以出现 0 次或 1 次
- {m} m ≥ 0 左边的字符出现m次
- {m,} m ≥ 0 左边的字符出现 ≥m 次
- {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的个数相同。不同于上一种情况。