首页 > 代码库 > python学习笔记21(正则表达式)

python学习笔记21(正则表达式)

正则表达式模式:

除了控制字符(+ ? . * ^ $ ( ) [ ] { } | \),所有字符匹配自己。可以通过用反斜杠前就转义控制字符。

下表列出了Python中可用正则表达式语法:

模式描述
^匹配的开始的
$匹配行尾
.匹配除换行符的任何单个字符。使用-m选项允许其匹配换行符也是如此。
[...]匹配括号内任何单个字符
[^...]匹配任何单个字符不在括号中
re*匹配0个或多个匹配前面表达式。
re+匹配1个或多个先前出现的表达式。
re?匹配0或1前面出现的表达式。
re{ n}精确匹配n个前面表达式的数量。
re{ n,}匹配n或多次出现上述表达式。
re{ n, m}匹配至少n次和前面表达式的大多数出现m次。
a| b匹配a或b。
(re)组正则表达式并记住匹配的文本。
(?imx)暂时切换上 i, m 或 x正则表达式的选项。如果括号中,仅该区域受到影响。
(?-imx)暂时关闭切换 i, m, 或 x 正则表达式的选项。如果括号中,仅该区域受到影响。
(?: re)组正则表达式而不匹配的记住文字。
(?imx: re)暂时切换上i, m, 或 x 括号内的选项。
(?-imx: re)暂时关闭切换i, m, 或 x 括号内的选项。
(?#...)注释
(?= re)指定使用的模式位置,没有一个范围。
(?! re)指定使用模式取反位置,没有一个范围。
(?> re)匹配独立的模式而不反向追踪。
\w匹配单词字符。
\W匹配非单词字符
\s匹配的空白,等价于[\ t\ñ\ r\ F]
\S匹配非空白
\d匹配的数字。等价于[0-9]
\D匹配非数字
\A匹配字符串的开始
\Z匹配字符串的结尾。如果一个换行符的存在,它只是换行之前匹配
\z匹配字符串的结尾
\G匹配点,最后一次匹配结束
\b匹配单词边界之外时,括号内。匹配退格键(0×08),括号里面的时候
\B匹配非单词边界
\n, \t, etc.匹配换行符,回车符,制表符等
\1...\9匹配第n个分组的子表达式。
\10匹配,如果它已经匹配第n个分组的子表达式。否则指的是一个字符码的八进制表示。

正则表达式的例子

文字字符:

示例描述
python匹配 "python".

字符类:

示例描述
[Pp]ython匹配 "Python" 或 "python"
rub[ye]匹配  "ruby" 或 "rube"
[aeiou]匹配任何一个小写元音
[0-9]匹配任何数字;如果[0123456789]
[a-z]匹配任何小写ASCII的字母
[A-Z]匹配任何大写的ASCII字母
[a-zA-Z0-9]匹配任何上述的
[^aeiou]匹配任何不是小写元音
[^0-9]匹配任何非数字

特殊字符类:

示例描述
.匹配除换行符外的任何字符
\d匹配一个数字:[0-9]
\D匹配一个非数字:[^0-9]
\s匹配一个空白字符:[\ t\ r\ñ\ F]
\S匹配非空白:[^\ t\ r\ñ\ F]
\w匹配一个单词字符:[A-ZA-Z0-9 _]
\W匹配非单词字符:[^ A-ZA-Z0-9 _]

重复案例:

示例描述
ruby?匹配“rub”或“ruby”:y是可选的
ruby*匹配“rub”加上0个或多个ys
ruby+匹配“rub”加上1个或多个ys
\d{3}完全匹配3个数字
\d{3,}完全匹配3个及以上的数字
\d{3,5}匹配3,4或5个数字

非贪婪的重复:

匹配最小重复次数:

示例描述
<.*>贪婪的重复:匹配“<python>perl>”
<.*?>非贪婪:匹配“<python>”,在“<python>perl>”

分组使用括号:

示例描述
\D\d+不分组:+重复\d
(\D\d)+分组:+重复\D\d对
([Pp]ython(, )?)+匹配“Python”,“Python, python, python”等。

反向引用:

再次匹配??先前匹配的组:

示例描述
([Pp])ython&\1ails匹配python&pails或Python&Pails
([‘"])[^\1]*\1单或双引号字符串。 \1匹配第一组匹配。 \2匹配第二组匹配等等。

替代方案:

示例描述
python|perl匹配"python" 或 "perl"
rub(y|le))匹配 "ruby" 或 "ruble"
Python(!+|\?)“Python”后跟一个或多个!或者一个?

锚点:

需要指定匹配位置

示例描述
^Python匹配“Python”在一个字符串或内部行的开始
Python$匹配“巨蟒”的字符串或行尾
\APython匹配“Python”在字符串的开始
Python\Z匹配“Python”在字符串的结尾
\bPython\b匹配“Python”在字边界
\brub\B\B非单词的边界:匹配“rub”,“rube”和“ruby”,但并不单独
Python(?=!)匹配“Python”,如果后面的感叹号
Python(?!!)匹配“Python”,如果后面不是感叹号

特殊的语法用圆括号:

示例描述
R(?#comment)符合“R”。其余全是注释
R(?i)uby当匹配“uby”时,不区分大小写
R(?i:uby)与上述相同
rub(?:y|le))只有组,而无需创建\1反向引用

python学习笔记21(正则表达式)