正则表达式

Posted 张子木

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了正则表达式相关的知识,希望对你有一定的参考价值。

 正则表达式是由普通字符及特殊字符(称为元字符)组成的文字模式,元字符(包含特殊含义,如果要作为普通字符使用,则需要转义)包括:. ^ $ + ? { } [ ] \ | ( ) 。例如:

"Go"   # 匹配字符串"Good Good"中的"Go"
"G.d"  #匹配字符串"Good Good"中的"God",  . 为元字符,匹配除行终止符外的任何字符
"d $"   #匹配字符串"Good Good"中的最后一个"d",$ 为元字符,匹配结尾   

python的re模块实现了正则表达式处理的功能。导入re模块后,使用findall、search函数可以进行匹配:

re.findall(pattern,string): 返回匹配结果列表
re.search(pattern,string):如果匹配,返回Match对象,否则返回None。

例如:

>>> import re   #导入re模块
>>> re.findall(d,godness)
[d]

 

正则表达式中包含你特殊字符,例如: \b表示单词边界;而字符串中的转义字符 \b 表示退格字符。因此在正则表达式中,这些与标准转义字符重复的特殊符号必须使用两个反斜线字符(‘\\‘),或者使用原始字符串(r" ") 或 (r‘ ‘)。

>>> re.findall("\bon\b","only on air")
[]
>>> re.findall("\\bon\\b","only on air")
[on]
>>> re.findall(r"\bon\b","only on air")
[on]

 

字符类是由一对方括号[ ]括起来的字符集合,正则表达式引擎匹配字符集中的任意一个字符。字符类的定义方式包括以下几种。

[xyz]:枚举字符集,匹配括号中的任意字符。例如,“t[aeio]n”匹配“tan”、"ten"、"tin"、"ton"。

[^xyz]:否定枚举字符集,匹配不在此括号中的任意字符。

[a-z]:指定范围的字符,匹配指定范围的任意匹配。

[^a-z]:指定范围以外的字符,匹配指定范围以外的任意字符。

例如:
>>> re.findall("fo[xr]","the quick brown fox jumps for food")
[fox, for]

 常用的预定义字符类

预定义字符 说明
. 除行终止符外的任何字符
\d 数字。等价于[0-9]
\D 非数字。等价于[^0-9]
\s 空白字符。等价于[\t\n\r\f\v]
\S 非空白字符。等价于[^\t\n\r\f\v]
\w 单词字符。等价于[a-zA-Z0-9]
\W 非单词字符。等价于[^a-zA-Z0-9]

 

以上是关于正则表达式的主要内容,如果未能解决你的问题,请参考以下文章

markdown 正则表达式模式片段

正则表达式匹配特定的 URL 片段而不是所有其他 URL 可能性

循环通过 python 正则表达式匹配

asp.net 使用正则表达式验证包含打开/关闭括号片段的属性字符串

攻破难啃的骨头-正则表达式(转)

正则表达式的贪婪和非贪婪模式