python正则表达式re匹配模式和特殊字符
正则表达式是可以匹配文本片段的模式,了解正则表达式的匹配模式和特殊字符集,你就可以搜索文本中的模式,也可以进行字符替换和文本分段。
1.匹配模式
语法 |
意义 |
说明 |
"." | 任意字符 | |
"^" | 字符串开始 | '^abc'匹配'abcabc'而不匹配'111abc222' |
"$" |
字符串结尾 |
与上同理 |
"*" |
0 个或多个字符(贪婪匹配) | <*>匹配<html>abc</html> |
"+" | 1 个或多个字符(贪婪匹配) | 与上同理 |
"?" |
0 个或多个字符(贪婪匹配) |
与上同理 |
*?,+?,?? |
以上三个取第一个匹配结果(非贪婪匹配) |
<*>匹配<html> |
{m,n} | 对于前一个字符重复m到n次,{m}亦可 |
a{8}匹配8个a、a{4,6}匹配4到6个a |
{m,n}? |
对于前一个字符重复m到n次,并取尽可能少 |
‘aaaaaa'中a{4,6}只会匹配4个 |
"\\" |
特殊字符转义或者特殊序列 |
|
[] |
表示一个字符集 |
[0-9]、[a-z]、[A-Z]、[^0] |
"|" |
或 |
A|B,或运算 |
(...) |
匹配括号中任意表达式 |
|
(?#...) |
注释,可忽略 | |
(?=...) |
Matches if ... matches next, but doesn't consume the string. |
'(?=world)' 在helloworld中匹配hello |
(?!...) |
Matches if ... doesn't match next. |
'(?!=world)' 若hello后面不为tworld,匹配hello |
(?<=...) |
Matches if preceded by ... (must be fixed length). |
'(?<=hello)world' 在helloworld中匹配world |
(?<!...) |
Matches if not preceded by ... (must be fixed length). |
'(?<!hello)world' 在helloworld中不匹配world |
2.特殊字符集
\A |
只在字符串开始进行匹配 |
\Z | 只在字符串结尾进行匹配 |
\b |
匹配位于开始或结尾的空字符串 |
\B |
匹配不位于开始或结尾的空字符串 |
\d |
相当于[0-9] |
\D |
相当于[^0-9] |
\s |
匹配任意空白字符:[\t\n\r\r\v] |
\S |
匹配任意非空白字符:[^\t\n\r\r\v] |
\w |
匹配任意数字和字母:[a-zA-Z0-9] |
\W |
匹配任意非数字和字母:[^a-zA-Z0-9] |
3.VERBOSE
该标志通过给予你更灵活的格式以便你将正则表达式写得更易于理解。当该标志被指定时,在 re 字符串中的空白符被忽略,除非该空白符在字符类中或在反斜杠之后;这可以让你更清晰地组织和缩进 re。它也可以允许你将注释写入 re,这些注释会被引擎忽略;注释用 "#"号 来标识,不过该符号不能在字符串或反斜杠之后。
未使用VERBOSE:
emphasis_pattern=r'\*([^\*]+)\*'
emphasis_pattern=re.compile(r'\*([^\*]+)\*')
使用VERBOSE:(详情参考python基础教程(第二版)P197)
>>> emphasis_pattern=re.compile(r'''
... \* #Beginning emphasis tag -- an asterisk
... ( #Begin group for capturing phrase
... [^\*]+ #Capture anything except asterisks
... ) #End group
... \* #Ending emphasis tag
... ''',re.VERBOSE)
本文转自独弹古调 51CTO博客,原文链接:http://blog.51cto.com/hunkz/1755116,如需转载请自行联系原作者