导图社区 Regex(Python)
这是一篇关于Regex(Python)的思维导图,介绍了元字符、量词、贪婪区和惰性匹配、re模块几个方面的内容,供小伙伴们学习借鉴。
编辑于2021-07-18 23:36:40Regex
元字符
\d——0 到 9 的任何数字
\D——除 0 到 9 的数字以外的任何字符
\w——任何字母、数字或下划线字符(可以认为是匹配“单词”字符)
\W——除字母、数字和下划线以外的任何字符
\s——空格、制表符或换行符(可以认为是匹配“空白”字符)
\S——除空格、制表符和换行符以外的任何字符
\b——匹配一个单词边界,也就是指单词和空格间的位置
\B——匹配非单词边界
\n——匹配⼀个换⾏符
\t——匹配⼀个制表符
\f——匹配一个换页符
\r——匹配一个回车符
\v——匹配一个垂直制表符
. ——匹配除换⾏符以外的任意字符
^——匹配字符串的开始
$——匹配字符串的结尾
a|b——匹配字符a或字符b
( )——匹配括号内的表达式,也表示⼀个组
[...]——匹配位于[]中的任何一个字符,如r[ae]d,会匹配‘rad’和‘red’等
[^...]——匹配除了字符组中字符的所有字符
[a-z]——字符范围。匹配指定范围内的任意字符。
[^a-z]——排除型的字符范围。匹配任何不在指定范围内的字符。
量词
*——重复零次或更多次
+——重复⼀次或更多次
?——重复零次或⼀次
{n}——重复n次
{n,}——重复n次或更多次
{n,m}——重复n到m次
贪婪匹配和惰性匹配
.*——贪婪匹配
.*?——惰性匹配
re模块
正则匹配搜索函数
pattern:匹配模式 string:要进行匹配的字符串 flags:可选参数,进行匹配的标志。
re. match( pattern, string [,flags])
只从字符串中第一个字符开始匹配
re. search( pattern, string [,flags])
搜索整个字符串
flag
re.I
忽略大小写
re.L
根据本地设置而更改\w.\W.\b.\s,以及\S的匹配内容
re.M
多行匹配模式
re.S
使“.”元字符也匹配换行符
re.U
匹配 Unicode字符
re.X
忽略pattern中的空格,并且可以使用“#”注释
re. findall( pattern, string [,flags])
用于在字符串中查找所有符合正则表达式的字符串
sub()与subn()
pattern:正则表达式模式 repl:要替换成的内容 string:进行内容替换的字符串 count:可选参数,最大替换次数
re. sub( pattern, repl, string[, count])
用于替换在字符串中符合正则表达式的内容,它返回替换后的字符串
re. subn( pattern, repl, string[, count])
返回一个元组用来保存替换的结果和替换次数
split()
pattern:正则表达式模式 string:要分割的字符串: maxsplit:可选参数,最大分割次数
re. split( pattern, string [maxsplit =0])
用于分割字符串,它返回分割后的字符串列表
re.compile()
pattern:正则表达式的匹配模式 flags:可选参数,编译标志。
compile(pattern[, flags])
可以使用re.compile函数将正则表达式编译生成一个RegexObject对象实例。然后可以通过生成的RegexObject对象实例对字符串进行操作,如查找、替换等。对于多次使用的正则表达式,使用这种编译后的对象实例,可以提高处理或匹配的速度。
方法
match(string[, pos[, endpos]])
string:要进行匹配的字符串 pos:可选参数,进行匹配的起始位置: endpos:可选参数,进行匹配的结束位置。
match()方法用于从字符串开始处进行匹配,或者从指定位置处进行匹配。要匹配的字符串必须位于开始,或者参数指定的位置才会匹配成功。如果匹配成功, match返回一个MatchObject对象实例。
search(string[, pos[, endpos]])
对字符串进行查找,不同的是 search()方法在整个字符串中搜索。如果查找成功, search()将返回一个 MatchObject对象实例。
findall(string[, pos[, endpos]])
findall()方法用于在字符串中查找所有符合正则表达式的字符串,并返回这些字符串的列表。
sub(repl, string[, count = 0])
rep:要替换成的内容 string:进行内容替换的字符串 count:可选参数,最大替换次数。
subn(repl, string[, count = 0])
split(string[, maxsplit = 0])
string:要分割的字符串: maxsplit:可选参数,最大分割次数。
分组
(?P<组名>)
为组设置一个名字
(?iLmsux)
设置匹配标志,可以是i、L、m、s、、x以及它们的组合。其含义与编译标志相同
(?: ...)
匹配 pattern 但不获取匹配结果,也就是说这是一个非获取匹配,不进行存储供以后使用。这在使用 “或” 字符 (|) 来组合一个模式的各个部分是很有用。例如, 'industr(?:y|ies) 就是一个比 ‘industry|industries’ 更简略的表达式。 industr(?:y|ies) —> “industry” industr(?=y|ies) —> “industr”
匹配但不捕获该匹配的子表达式,即它是一个非捕获匹配,不存储,供以后使用的匹配
(?P=name)
表示在此之前的名为name的组
(?#...)
表示注释
(?=...)
正向肯定预查(look ahead positive assert),在任何匹配pattern的字符串开始处匹配查找字符串。这是一个非获取匹配,也就是说,该匹配不需要获取供以后使用。例如,“Windows(?=95|98|NT|2000)“能匹配"Windows2000"中的"Windows”,但不能匹配"Windows3.1"中的"Windows”。预查不消耗字符,也就是说,在一个匹配发生后,在最后一次匹配之后立即开始下一次匹配的搜索,而不是从包含预查的字符之后开始。
用于正则表达式之后,表示如果“=”后的内容在字符串中出现则匹配,但不返回“=”后的内容
(?!...)
正向否定预查(negative assert),在任何不匹配pattern的字符串开始处匹配查找字符串。这是一个非获取匹配,也就是说,该匹配不需要获取供以后使用。例如"Windows(?!95|98|NT|2000)“能匹配"Windows3.1"中的"Windows”,但不能匹配"Windows2000"中的"Windows"。预查不消耗字符,也就是说,在一个匹配发生后,在最后一次匹配之后立即开始下一次匹配的搜索,而不是从包含预查的字符之后开始。
用于正则表达式之后,表示如果“!”后的内容在字符串中不出现则匹配,但不返回“!”后的内容
(?<=...)
反向(look behind)肯定预查,与正向肯定预查类似,只是方向相反。例如,"(?<=95|98|NT|2000)Windows"能匹配"2000Windows"中的"Windows",但不能匹配"3.1Windows"中的"Windows"。
用于正则表达式之前,与(?=...)含义相同
(?<!...)
反向否定预查,与正向否定预查类似,只是方向相反。例如"(?<!95|98|NT|2000)Windows"能匹配"3.1Windows"中的"Windows",但不能匹配"2000Windows"中的"Windows"。
用于正则表达式之前,与(?!...)含义相同
group()、groups()、groupdict()
group([group1, ...])
返回值为字符串,当传递多个参数时其返回值为元组
groups([default])
返回值为元组
groupdict([default])
返回值为字典
start()、end()、span()
groupid为可选参数,即分组编号。如果不向其传递参数,则返回整个子字符串的索引
start([groupid=0])
返回子字符串或者组的起始位置索引
end([groupid=0])
返回子字符串或者组的结束位置索引
span([groupid=0])
以元组的形式返回以上两者