Python的正则表达式前添加"r"的作用:
r 代表原生字符串,声明引号中的内容表示该内容的原始含义,避免多次转义添加的多重反斜杠。
多重反斜杠:正则表达式使用 "\" 作为转义字符,如果匹配文本中 "\",正则表达式需要4个 "\",前2个 "\" 和后两个 "\" 在 python 解释器中分别转义成一个 "\",2个 "\" 在正则中被转义为"\"。
>>> import re
>>> s = "d: \\abd\\n"
>>> re.match("d: \\\\", s).group()
>>> re.match(r"d: \\", s).group()
正则表达式中括号[]中不需要使用|作为划分符号
使用中括号[]作为正则条件选项,不需要使用|分隔多个选项,
如果需要多个内容可使用(||)等方式
?<= 和 ?= 的使用:
(?<=(href=")).{1,200}(?=(">)):(?<=(href=")) 匹配以(href=")开头的字符串并捕获(存储)到分组中
如果使用(?:href=")表示匹配以(href=") 开头的字符串但是不存储
(?=(">)) 匹配以(">)结尾的字符串并捕获(存储)到分组中
(?:pattern) 匹配得到的结果包含pattern。
(?=pattern) 则不包含。
例如:"industry abc"的匹配结果:
industr(?:y|ies) —> “industry”
industr(?=y|ies) —> “industr”
分组捕获匹配exp,并捕获文本到自动命名name的组里 (?<name>exp) 匹配exp,也可用(?'name'exp); (?:exp) 匹配exp但不捕获匹配的文本 .
位置指定 (?=exp) 匹配exp前面的位置 (?<=exp) 匹配exp后面的位置 (?!exp) 匹配后面跟的不是exp的位置 (?<!exp) 匹配前面不是exp的位置 注释 (?#comment) 这种类型的组不对正则表达式的处理产生任何影响,只是为了提供让人阅读注释。
使用正则替换字符串中的一部分:
t = "2021-09-17T15:57:31.021+08:00"
pattern = "(\d{4}-\d{2}-)(\d{2})(.*)"
re.sub(pattern, lambda x: x.group(1) + replaced_str + x.group(3), t)
x.group(0):返回整个pattern匹配的内容。
. 匹配除换行符以外的任意字符
\w 匹配字母或数字或下划线或汉字 '[^A-Za-z0-9_]';匹配汉字要根据操作系统和应用环境
匹配文件路径:\/(\w+\/?)+
匹配 MAC 地址:如 “00-01-6C-06-A6-29, 00:01:6C:06:A6:29“
((([a-f0-9]{2}:){5})|(([a-f0-9]{2}-){5}))[a-f0-9]{2} (?i)整个正则忽略大小写,即re中不必添加 re.I (?i)((([a-f0-9]{2}:){5})|(([a-f0-9]{2}-){5}))[a-f0-9]{2}
正则表达式模式修饰符:
1、/g 表示该表达式将用来在输入字符串中查找所有可能的匹配,返回的结果可以是多个。如果不加/g最多只会匹配一个
2、/i 表示匹配的时候不区分大小写,这个跟其它语言的正则用法相同
3、/m 表示多行匹配,即匹配换行符两端的潜在匹配,会影响正则中的^$符号
4、/s 与/m相对,单行模式匹配。
5、/e 可执行模式,为PHP专有参数,例如preg_replace函数。
6、/x 忽略空白模式。
上述修饰符可混合使用,如 /ig、/ie等。
参考: