概述
https://www.cnblogs.com/zjltt/p/6955965.html
元字符
元字符在字符集中不起作用
\用于取消元字符
语法
|
说明
|
表达式实例
|
完整匹配的字符串
|
一般字符
|
匹配自身
|
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