欢迎光临散文网 会员登陆 & 注册

Python个人学习笔记 正则表达式(一)

2023-04-16 14:36 作者:ベレッタ  | 我要投稿

正则表达式的组成

①元字符

元字符一次只能匹配一个字符。

特殊元字符:

⑴ .

点运算符。可以匹配除换行符外任意一个字符。若启用DOTALL标志,则也可以匹配换行符。


⑵ ^

插入符号。可以匹配字符串的开头。若启用MULTILINE标志,则也可以匹配行的开头。


⑶ \A

可以匹配字符串的开头。但没有多行模式。


⑷ $

可以匹配字符串的结尾。若启用MULTILINE标志,则也可以匹配行的结尾。


⑸ \b

匹配词边界。

要匹配的词后面不能再跟其他字母。


⑹ \B

匹配非词边界。

和\b相反。


⑺ \d

匹配任意数字字符。若启用UNICODE标志,则还能匹配更广泛的 Unicode 数字字符。


⑻ \D

匹配任意非数字字符。


⑼ \s

匹配任意空白字符。


⑽ \S

匹配任意非空白字符。


⑾ \w

匹配任意字母、数字或下划线。


⑿ \W

匹配任意非字母、数字或下划线。


②字符集

可以匹配字符集中的任意一个字符。用[]创建字符集。

减号(-)若出现在字符集内的2个字符之间,则表示2个字符范围内的字符;

                若出现在字符集的开头或结尾,则表示减号这个符号。

中括号表示字符集,如果想匹配中括号,最好加 \ 来转义。

虽然不加也能匹配,但有时候会出错。

^表示不在字符集内的任意字符。


③表达式量词

可以和各单个字符组合。

⑴ *

匹配0次或多次。


⑵ +

匹配1次或多次。


⑶ ?

匹配0次或1次。


⑷ |

或运算符。

▲注意,或运算符的优先级非常低。


⑸ {}

{n}

精确匹配n次。


{m,n}

匹配[m,n]次。


{,n}

至多匹配n次。


{n,}

至少匹配n次。


⑹ ()

将括号内的所有字符视为一个组,与其他量词组合会作用于整个组。


⑺ \n

匹配到的第n个捕获组。

\0表示匹配到的整个字符串。


④组

用小括号将小表达式组成大表达式。



Match对象

match()函数和search()函数匹配成功会返回一个Match对象,匹配失败则返回None。


Match对象的用法

用括号给正则表达式模式分组,Match对象可以确定每个组中子表达式匹配到的文本。

⑴ lastindex

返回匹配到的文本组的数量。

4组括号,所以输出为4。

⑵ group()

返回指定组匹配到的文本。默认值为0,返回整个正则表达式匹配到的文本。


⑶ groups()

返回一个包含所有组的元组。


⑷ groupdict()

返回所有已命名组组成的字典。

未命名的组就不会被输出。


⑸ start() / end()

返回指定组匹配到的文本在字符串中的开始/结束位置。(左闭右开区间)


⑹ span()

返回指定组匹配到的文本在字符串中的开始和结束的位置。


正则表达式功能标志

匹配函数的第三个参数。

⑴ re.ASCII / re.A

限制匹配规则为 ASCII 字符集。启用后,\w、\W、\b、\B、\d、\D、\s 和 \S 等特殊字符将仅匹配 ASCII 字符集中的对应字符。


⑵ re.IGNORECASE / re.I

不区分大小写。


⑶ re.LOCALE / re.L

使用数字字符、单词边界、数字匹配时遵循当前的本地化设置。


⑷ re.MULTILINE / re.M

多行模式。使用^和$匹配行首和行尾以及字符串的开头和结尾。


⑸ re.DOTALL / re.S

使用点运算符.匹配所有字符,包括换行符\n。


⑹ re.UNICODE / re.U

#使用UNICODE格式匹配字母数字字符、单词边界和数字。


⑺ re.VERBOSE / re.X

冗长模式。会忽略空格和换行(除非是正则表达式的一部分),可以在正则表达式中加注释,便于理解。

去掉 re.X 将会输出False。


⑻ re.DEBUG

在IDLE中执行操作时将输出编译后的正则表达式的调试信息。



匹配小技巧

⑴ compile()

参数为正则表达式,编译为一个正则表达式对象,方便重复使用。


⑵ fullmatch() / $

完全匹配。

当用match()函数的时候,只要开头匹配到了,就会算是匹配成功。

但是字符串中含有空格,并不是完全匹配的,会与预期不符。这时候可以在表达式结尾加$或者用fullmatch()函数,只有完全匹配才会返回Match对象。


⑶ \number

指定组。

上面的例子中,有两个组 (\w+)和([a-z]+),\2则表示第二组。 

(\w+)匹配到ngm,([a-z]+)匹配到hhay。

\n会记录第n组所匹配到的内容,所以这个\2就表示hhay。

所以下面的会返回True。


\n可以用于sub()函数替换文本中重复的内容等功能。


Python个人学习笔记 正则表达式(一)的评论 (共 条)

分享到微博请遵守国家法律