正则表达式是特殊的字符序列,可使用模式中保留的特殊语法来帮助您匹配或查找其他字符串或字符串集。
Python模块 re 提供对Python中类似Perl的正则表达式的全面支持。如果在编译或使用正则表达式时发生错误,则re模块会引发异常re.error。
Match 函数
此函数尝试使用可选的标志将RE 模式与字符串匹配。
这是此函数的语法-
re.match(pattern, string, flags=0)
这是参数的描述-
Sr.No. | Params & Remark |
---|---|
1 |
pattern 这是要匹配的正则表达式。 |
2 |
string 这是字符串,将对其进行搜索以匹配字符串开头的模式。 |
3 |
flags 您可以使用按位或(|)指定不同的标志。这些是修饰符,在下表中列出。 |
re.match 函数在成功时返回 match 对象,在失败时返回 None 。无涯教程使用 match 对象的 group(num)或 groups()函数来获取匹配的表达式。
Sr.No. | Match Object Method & Remark |
---|---|
1 |
group(num=0) 此方法返回整个匹配项 |
2 |
groups() 此方法返回一个元组中的所有匹配子组(如果没有,则为空) |
#!/usr/bin/python import re line="Cats are smarter than dogs" matchObj=re.match( r'(.*) are (.*?) .*', line, re.M|re.I) if matchObj: print "matchObj.group() : ", matchObj.group() print "matchObj.group(1) : ", matchObj.group(1) print "matchObj.group(2) : ", matchObj.group(2) else: print "No match!!"
执行以上代码后,将产生以下输出-
matchObj.group() : Cats are smarter than dogs matchObj.group(1) : Cats matchObj.group(2) : smarter
Search 函数
此函数使用可选的标志在字符串字符串中搜索RE 模式的首次出现。
这是此函数的语法-
re.search(pattern, string, flags=0)
这是参数的描述-
Sr.No. | Parameter & Remark |
---|---|
1 |
pattern 这是要匹配的正则表达式。 |
2 |
string 这是字符串,将对其进行搜索以匹配字符串中任何位置的模式。 |
3 |
flags 您可以使用按位或(|)指定不同的标志。这些是修饰符,在下表中列出。 |
re.search 函数在成功时返回 match 对象,在失败时返回 none 。无涯教程使用 match 对象的 group(num)或 groups()函数来获取匹配的表达式。
Sr.No. | Match Object Methods & Remark |
---|---|
1 |
group(num=0) 此方法返回整个匹配项 |
2 |
groups() 此方法返回一个元组中的所有匹配子组(如果没有,则为空) |
#!/usr/bin/python import re line="Cats are smarter than dogs"; searchObj=re.search( r'(.*) are (.*?) .*', line, re.M|re.I) if searchObj: print "searchObj.group() : ", searchObj.group() print "searchObj.group(1) : ", searchObj.group(1) print "searchObj.group(2) : ", searchObj.group(2) else: print "Nothing found!!"
执行以上代码后,将产生以下输出-
searchObj.group() : Cats are smarter than dogs searchObj.group(1) : Cats searchObj.group(2) : smarter
Match与Search
Python根据正则表达式提供了两种不同的基本操作: match 仅在字符串的开头检查匹配项,而 search 在字符串的任何位置检查匹配项。
#!/usr/bin/python import re line="Cats are smarter than dogs"; matchObj=re.match( r'dogs', line, re.M|re.I) if matchObj: print "match --> matchObj.group() : ", matchObj.group() else: print "No match!!" searchObj=re.search( r'dogs', line, re.M|re.I) if searchObj: print "search --> searchObj.group() : ", searchObj.group() else: print "Nothing found!!"
执行以上代码后,将产生以下输出-
No match!! search --> searchObj.group() : dogs
Sub 替换函数
使用正则表达式的最重要的 re 方法之一是 sub 。
re.sub(pattern, repl, string, max=0)
此方法用 repl 替换 string 中RE pattern 的所有出现,除非提供 max ,否则将所有出现替换。
#!/usr/bin/python import re phone="2004-959-559 # This is Phone Number" # Delete Python-style comments num=re.sub(r'#.*$', "", phone) print "Phone Num : ", num # Remove anything other than digits num=re.sub(r'\D', "", phone) print "Phone Num : ", num
执行以上代码后,将产生以下输出-
Phone Num : 2004-959-559 Phone Num : 2004959559
正则表达式修饰符
正则表达式文字可以包括可选的修饰符,以控制匹配的各个方面。修饰符被指定为可选标志。您可以使用异或(|)来提供多个修饰符
Sr.No. | Modifier & Remark |
---|---|
1 |
re.I 不区分大小写。 |
2 |
re.L 根据当前语言环境解释单词。 |
3 |
re.M 使$匹配行的结尾,并使^匹配任何行的开头。 |
4 |
re.S 使句点(.)匹配任何字符,包括换行符。 |
5 |
re.U 根据Unicode字符集解释字母。 |
6 |
re.X 忽略空格,并将未转义的#视为注释标签。 |
正则表达式模式
除控制字符(+?。* ^ $()[] {} |\)外,所有字符都匹配。您可以在控制字符前加反斜杠来对其进行转义。
下表列出了Python中可用的正则表达式语法-
Sr.No. | Pattern & Remark |
---|---|
1 |
^ 匹配行首。 |
2 |
$ 匹配行尾。 |
3 |
. 匹配除换行符以外的任何单个字符。 |
4 |
[...] 匹配括号中的任何单个字符。 |
5 |
[^ ...] 匹配任何不在方括号中的单个字符 |
6 |
re * 匹配0个或多个出现的前一个表达式。 |
7 |
re + 匹配1个或多个出现的前一个表达式。 |
8 |
re? 匹配0或1个出现的前一个表达式。 |
9 |
re {n} 精确匹配前一个表达式的n次出现。 |
10 |
re {n,} 匹配n个或多个出现的前一个表达式。 |
11 |
re {n,m} 至少匹配n个,最多匹配m个先前的表达式。 |
12 |
a | b 匹配a或b。 |
13 |
(re) 对正则表达式进行分组并记住匹配的文本。 |
14 |
(?imx) 临时启用正则表达式中的i,m或x选项。 |
15 |
(?-imx) 暂时关闭正则表达式中的i,m或x选项。 |
16 |
(?: re) 对正则表达式进行分组,而无需记住匹配的文本。 |
17 |
(?imx:re) 暂时在括号内打开i,m或x选项。 |
18 |
(?-imx:re) 暂时关闭括号内的i,m或x选项。 |
19 |
(?#...) 注释. |
20 |
(?= re) 使用模式指定位置。 |
21 |
(?! re) 使用模式否定指定位置。 |
22 |
(?> re) 匹配独立模式而无需回溯。 |
23 |
\w 匹配单词字符。 |
24 |
\W 匹配非单词字符。 |
25 |
\s 匹配空格。等效于[\t\n\r\f]。 |
26 |
\S 匹配非空格。 |
27 |
\d 匹配数字。相当于[0-9]。 |
28 |
\D 匹配非数字。 |
29 |
\A 匹配字符串的开头。 |
30 |
\Z 匹配字符串的结尾。如果存在换行符,则匹配换行符。 |
31 |
\z 匹配字符串的结尾。 |
32 |
\G 匹配结束点。 |
33 |
\b 在方括号外时匹配单词边界。放在方括号内时,匹配退格键(0x08)。 |
34 |
\B 匹配非单词边界。 |
35 |
\n,\t etc 匹配换行符,回车符,制表符等。 |
36 |
\1 ...\9 匹配第n个分组的子表达式。 |
37 |
\10 如果已经匹配,则匹配第n个分组的子表达式。否则是指字符代码的八进制表示形式。 |
正则表达式示例
Sr.No. | Example & Remark |
---|---|
1 |
python 匹配" python"。 |
Sr.No. | Example & Remark |
---|---|
1 |
[Pp] ython 匹配" Python"或" python" |
2 |
rub [ye] 匹配" ruby"或" rube" |
3 |
[aeiou] 匹配任何一个小写的元音 |
4 |
[0-9] 匹配任意数字;与[0123456789]相同 |
5 |
[a-z] 匹配任何小写ASCII字母 |
6 |
[A-Z] 匹配任何大写ASCII字母 |
7 |
[a-zA-Z0-9] 符合以上任何条件 |
8 |
[^ aeiou] 匹配小写元音以外的其他任何东西 |
9 |
[^ 0-9] 匹配数字以外的任何东西 |
Sr.No. | Example & Remark |
---|---|
1 |
. 匹配换行符以外的任何字符 |
2 |
\d 匹配数字:[0-9] |
3 |
\D 匹配一个非数字:[^ 0-9] |
4 |
\s 匹配空白字符:[\t\r\n\f] |
5 |
\S 匹配非空格:[^\t\r\n\f] |
6 |
\w 匹配一个单词字符:[A-Za-z0-9_] |
7 |
\W 匹配一个非单词字符:[^ A-Za-z0-9_] |
Sr.No. | Example & Remark |
---|---|
1 |
ruby? 匹配" rub"或" ruby":y是可选的 |
2 |
ruby* 匹配" rub"加上0或更多ys |
3 |
ruby + 匹配" rub"加上1个或多个ys |
4 |
\d {3} 精确匹配3位数字 |
5 |
\d {3,} 匹配3个或更多数字 |
6 |
\d {3,5} 匹配3、4或5位数字 |
这匹配最小的重复次数-
Sr.No. | Example & Remark |
---|---|
1 |
<.*> 贪婪重复:匹配“ <python> perl>” |
2 |
<.*?> 非贪婪:匹配“ <python> perl>”中的“ <python>” |
Sr.No. | Example & Remark |
---|---|
1 |
\D\d + 无组:+重复\d |
2 |
(\D\d)+ 分组:+重复\D\d |
3 |
([Pp] ython(,)?)+ 匹配" Python"," Python,python,python"等。 |
这再次匹配先前匹配的组-
Sr.No. | Example & Remark |
---|---|
1 |
([Pp])ython&\1ails 匹配python&pails或Python&Pails |
2 |
(['"])[^\1] *\1 单引号或双引号字符串。\1匹配第一组匹配的任何内容。\2匹配第二组匹配的任何东西,依此类推。 |
Sr.No. | Example & Remark |
---|---|
1 |
python | perl 匹配" python"或" perl" |
2 |
rub(y | le)) 匹配"ruby"或"ubler" |
3 |
Python(!+ |\?) " Python"后跟一个或多个!还是一个? |
这需要指定匹配位置。
Sr.No. | Example & Remark |
---|---|
1 |
^ Python 开头匹配" Python" |
2 |
Python $ 行末匹配" Python" |
3 |
\APython 在字符串开头匹配" Python" |
4 |
Python\Z 末尾匹配" Python" |
5 |
\bPython\b 在单词边界处匹配" Python" |
6 |
\brub\B \B为非单词边界:匹配" rube"和" ruby"中的" rub",但不单独匹配 |
7 |
Python(?=!) 如果后面带有感叹号,则匹配" Python"。 |
8 |
Python(?!!) 匹配" Python",如果没有后跟一个感叹号。 |
Sr.No. | Example & Remark |
---|---|
1 |
R(?#comment) 匹配" R"。所有其余的都是评论 |
2 |
R(?i)uby 匹配" uby"时不区分大小写 |
3 |
R(?i:uby) 同上 |
4 |
rub(?:y | le)) 仅在不创建\1反向引用的情况下进行分组 |
参考链接
https://www.learnfk.com/python/python-reg-expressions.html
标签:Remark,匹配,No,Python,无涯,re,正则,group From: https://blog.51cto.com/u_14033984/7240408