python 的 re 模块(Regular Expression 正则表达式)提供各种正则表达式的匹配操作,在文本解析、复杂字符串分析和信息提取时是一个非常有用的工具.
模块作用主要是用于字符串和文本处理,查找,搜索,替换等。
基本的正则表达式:
python中以开头的元字符:
特殊序列符号
意义
A
只在字符串开始进行匹配
Z
只在字符串结尾进行匹配
b
匹配位于开始或结尾的空字符串
B
匹配不位于开始或结尾的空字符串
d
相当于[0-9]
D
相当于[^0-9]
s
匹配任意空白字符:[tnrrv]
S
匹配任意非空白字符:[^tnrrv]
w
匹配任意数字和字母:[a-zA-Z0-9]
W
匹配任意非数字和字母:[^a-zA-Z0-9]
正则表达式语法表
语法 意义 说明
"." 任意字符
"^" 字符串开始 '^hello'匹配'helloworld'而不匹配'aaaahellobbb'
"$" 字符串结尾 与上同理
"*"
0 个或多个字符(贪婪匹配)
<*>匹配<title>chinaunix</title>
"+"
1 个或多个字符(贪婪匹配)
与上同理
"?"
0 个或多个字符(贪婪匹配)
与上同理
*?,+?,??
以上三个取第一个匹配结果(非贪婪匹配) <*>匹配<title>
{m,n}
对于前一个字符重复m到n次,{m}亦可
a{6}匹配6个a、a{2,4}匹配2到4个a
{m,n}?
对于前一个字符重复m到n次,并取尽可能少
‘aaaaaa'中a{2,4}只会匹配2个
""
特殊字符转义或者特殊序列
[]
表示一个字符集 [0-9]、[a-z]、[A-Z]、[^0]
"|"
或 A|B,或运算
(...)
匹配括号中任意表达式
(?#...)
注释,可忽略
(?=...)
Matches if ... matches next, but doesn't consume the string.
'(?=test)' 在hellotest中匹配hello
(?!...)
Matches if ... doesn't match next.
'(?!=test)' 若hello后面不为test,匹配hello
(?<=...)
Matches if preceded by ... (must be fixed length).
'(?<=hello)test' 在hellotest中匹配test
(?<!...)
Matches if not preceded by ... (must be fixed length).
'(?<!hello)test' 在hellotest中不匹配test
匹配的标志和含义
标志 含义
re.I 忽略大小写
re.L 根据本地设置而更改w,W,b,B,s,S的匹配内容
re.M 多行匹配模式
re.S 使“.”元字符匹配换行符
re.U 匹配Unicode字符
re.X 忽略需要匹配模式中的空格,并且可以使用"#"号注释
文本内容(提取linux下的password文件)
man:x:6:12:man:/var/cache/man:/bin/nologin
re模块中有3个搜索函数,每个函数都接受3个参数(匹配模式,要匹配的字符串,进行匹配的标志),如果匹配到了就返回一个对象实例,么有就返会None.
findall():用于在字符串中查找符合正则表达式的字符串,并返回这些字符串的列表 (www.jb200.com)
search():搜索整个字符串,返回对象实例
match():只从第一个字符开始匹配,后面的不再匹配,返回对象实例
返回是对象实例有2个方法,
start():返回记录匹配到字符的开始索引
end():返回记录匹配到字符的结束索引