常见正则表达式符号和特殊符号表
记号 |
说明 |
实例 |
literal |
匹配字符串的值 |
abc |
re1|re2 |
匹配正则表达式re1或re2 |
abc|123 |
.(dot) |
匹配任何字符,换行符除外 (但编译标记[S或DOTALL能推翻这个限制]) |
a.a |
^ |
匹配字符串的开始 |
^Hi |
$ |
匹配字符串的结尾 |
doc$ |
* |
匹配前面出现的正则表达式零次 或多次 |
[A-Za-z0-9]* |
+ |
匹配前面出现的正则表达式一次 或多次 |
[a-z]+ |
? |
匹配前面出现的正则表达式零次 或一次 |
foo? |
{N} |
匹配前面出现的正则表达式N次 |
[0-9]{3} |
{M, N} |
匹配重复出现M次 到 N次的正则表达式 |
[0-9]{5, 9} |
[...] |
匹配字符组里出现的任意一个字符 |
[aeiou] |
[..x-y..] |
匹配从字符x到y中任意一个字符 |
[0-9], [A-Z], [a-z] |
[^...] |
不匹配此字符集中出现的任何一个字符,包括某一范围的字符 |
[^aeiou], [^a-z] |
(*|+|?|{})? |
用于上面出现的任何“非贪婪” 版本重复匹配次数符号(*, +, ?, {}) |
.*?[a-z] |
(...) |
匹配封闭括号中的正则表达式,并保持为子组 |
([0-9]{3})? |
特殊字符 |
||
\d |
匹配任何数字,和[0-9]一样,\d是\d的反义:表示任何非数字符 |
data\d+.txt |
\w |
匹配任何数字字母字符,和[A-Za-z0-9]相同,\W是\w的反义 |
[a-z_]\w+ |
\s |
匹配任何空白符,和[\n \t \r \v \f]相同,\S是\s的反义 |
of\sthe |
\b |
匹配单词边界,\B是\b的反义 |
\bThe\b |
\nn |
匹配已保存的子组 |
price:\16 |
\c |
逐一匹配特殊字符c,即,取消它的特殊含义,按字面匹配 |
\., \\, \* |
\A(\Z) |
匹配字符串的起始(结束) |
\ADear |
python 通过标准库中的re模块支持正则表达式
{N}:匹配N次前面出现的正则表达式;做更精确地匹配,可以用[]表示范围,用()表示的就是要提取的分组(Group)
比如:[0-9a-zA-Z\_]可以匹配一个数字、字母或者下划线;
{N}:匹配N次前面出现的正则表达式;做更精确地匹配,可以用[]表示范围,用()表示的就是要提取的分组(Group)
比如:[0-9a-zA-Z\_]可以匹配一个数字、字母或者下划线;
\d可以匹配一个数字,\w可以匹配一个字母或数字
使用Python的r前缀,就不用考虑转义的问题了:
s = r'ABC\-001' # Python的字符串
# 对应的正则表达式字符串不变:
# 'ABC\-001'
使用Python的r前缀,就不用考虑转义的问题了:
s = r'ABC\-001' # Python的字符串
# 对应的正则表达式字符串不变:
# 'ABC\-001'
切分字符串
>>> re.split(r'[\s\,]+', 'a,b, c d')
['a', 'b', 'c', 'd']
>>> re.split(r'[\s\,]+', 'a,b, c d')
['a', 'b', 'c', 'd']
在正则表达式中,如果直接给出字符,就是精确匹配。用\d
可以匹配一个数字,\w
可以匹配一个字母或数字,所以:
-
'00\d'
可以匹配'007'
,但无法匹配'00A'
; -
'\d\d\d'
可以匹配'010'
; -
'\w\w\d'
可以匹配'py3'
;
.
可以匹配任意字符,所以:
'py.'
可以匹配'pyc'
、'pyo'
、'py!'
等等。
要匹配变长的字符,在正则表达式中,用*
表示任意个字符(包括0个),用+
表示至少一个字符,用?
表示0个或1个字符,用{n}
表示n个字符,用{n,m}
表示n-m个字符:
来看一个复杂的例子:\d{3}\s+\d{3,8}
。
我们来从左到右解读一下:
-
\d{3}
表示匹配3个数字,例如'010'
; -
\s
可以匹配一个空格(也包括Tab等空白符),所以