概述
元字符
元字符在字符集中不起作用
\用于取消元字符
语法 | 说明 | 表达式实例 | 完整匹配的字符串 |
一般字符 | 匹配自身 | abc | abc |
. | 匹配任意字符(\n除外) | ab. | abc |
[...] | 字符集(对应位子可以是字符集中的任意字符) | a[bcd]e | abe ace ade |
预定义字符集(可以写在字符集[...]中) |
|
|
|
\d | 数字:[0-9] | a\dc | a1c |
\D | 非数字[^\d] | a\Dc | abc |
\s | 空白字符:[<空格>\t\r\n\f\v] | a\sc | a c |
\S | 非空白字符:[^\s] | a\Sc | abc |
\w | 单词字符:[A-Za-z0-9_] | a\wc | abc |
\W | 非单词字符:[^\w] | a\Wc | a c |
数量词(用在字符或(...)之后) |
|
|
|
* | 匹配前一个字符0次或无限次 | abc* | ab abccc |
+ | 匹配前一个字符1次或无限次 | abc+ | abc abccc |
? | 匹配前一个字符0次或1次 | abc? | ab abc |
{m} | 匹配前一个字符m次 | ab{2}c | abbc |
{m,n} | 匹配前一个字符m至n次 | ab{1,2}c | abc abbc |
*? +? ?? {m,n}? | 使* + {m,n}变成非贪婪模式 |
|
|
边界匹配 |
|
|
|
^ | 匹配字符串开头 在多行模式中匹配每一行开头 | ^abc | abc |
$ | 匹配字符串末尾 多行模式中每一行末尾 | $abc | abc |
逻辑和分组 |
|
|
|
| | 左右任意匹配一个 | abc|def | abc def |
(...) | 分组 | (abc){2} a(123|456)c | abcabc a123c a456c |
(?P<name>...) | 分组,原有编号指定别名 | (?P<id>abc){2} | abcabc |
(?p=name) | 引用别名为<name>分组的字符串 | (?P<id>\d)abc(?P=id) | 1abc1 |
正则匹配模式表
标志 | 含义 |
re.S(DOTALL) | 使.匹配包括换行在内的所有字符 |
re.I(IGNORECASE) | 使匹配对大小写不敏感 |
re.L(LOCALE) | 做本地化识别(locale-aware)匹配,法语等 |
re.M(MULTILINE) | 多行匹配,影响^和$ |
re.X(VERBOSE) | 该标志通过给予更灵活的格式以便将正则表达式写得更易于理解 |
re.U | 根据Unicode字符集解析字符,这个标志影响\w,\W,\b,\B |
执行匹配
方法/属性 | 作用 |
match() | 字符串开始位置匹配,成功返回MatchObject,失败返回None |
search() | 扫描字符串,找到RE匹配的位置,成功返回MatchObject,失败返回None |
findall() | 找到RE匹配的所有子串,作为一个列表返回 |
finditer() | 找到RE匹配的所有子串,作为一个迭代器返回 |
MatchObject实例方法
方法/属性 | 作用 |
group() | 返回被RE匹配的字符串 |
start() | 返回匹配开始的位置 |
end() | 返回匹配结束的位置 |
span() | 返回一个元祖包含匹配(开始,结束)的位置 |
match函数
语法
re.match(pattern,string,flags=0)
参数说明
参数 | 描述 |
patten | 正则表达式 |
string | 被搜索匹配的字符串,字符串开始 |
flags | 正则表达式修饰符 |
re.match匹配成功返回matchOject,失败返回None,通过group(num)或groups()获取匹配对象
匹配对象的方法
匹配对象的方法 | 描述 |
group(num=0) | 返回整个匹配(指定分组) |
groups() | 以元祖形式返回匹配子组 |
例子
import re
line = "Dogs are smart than caters"
matchObject = re.match(r'(.*) are .* than (.*)',line,re.M|re.I)
if matchObject:
print "matchObject group()",matchObject.group()
print "matchObject group(1)",matchObject.group(1)
print "matchObject group(2)",matchObject.group(2)
else:
print "No match"
当执行上面的代码,它产生以下结果:
matchObject group() Dogs are smart than caters
matchObject group(1) Dogs
matchObject group(2) caters
search函数
语法
re.search(pattern,string,flags=0)
参数说明
参数 | 描述 |
patten | 正则表达式 |
string | 被搜索匹配的字符串,字符串开始 |
flags | 正则表达式修饰符 |
re.search匹配成功返回searchOject,失败返回None,通过group(num)或groups()获取匹配对象
匹配对象的方法
匹配对象的方法 | 描述 |
group(num=0) | 返回整个匹配(指定分组) |
groups() | 以元祖形式返回匹配子组 |
例子
import re
line = "Dogs are smart than caters"
seachObject = re.search(r'(.*) are .* than (.*)',line,re.M|re.I)
if seachObject:
print "searcObject.group():",seachObject.group()
print "searcObject.group(1):",seachObject.group(1)
print "searcObject.group(2):",seachObject.group(2)
else:
print "No search"
当执行上面的代码,它产生以下结果
searcObject.group(): Dogs are smart than caters
searcObject.group(1): Dogs
searcObject.group(2): caters