一,正则表达式
1.常用正则表达式符号
符号 |
描述 |
正则表达式模式 |
匹配结果 |
?a|b |
匹配正则表达式 a或者 b
|
a|b |
a,b |
? ?. |
匹配任意字符(除n以外) |
.abc |
1abc,aabc,6abc |
? ^ |
从字符串开始匹配 |
^String |
String |
? $? |
从字符串结尾匹配 |
End$ |
End |
? * |
匹配 0 次或者多次前面出现的正则表达式 |
123* |
1233,12,123333 |
? + |
匹配 1 次或者多次前面出现的正则表达式 |
123* |
123,1233,123333 |
? ? |
匹配 0次或者1次前面出现的正则表达式 |
123? |
12,123 |
{n} |
匹配n次前面出现的正则表达式 |
123{2} |
1233 |
{n,m} |
匹配 n~m次前面出现的正则表达式 |
123{2,4} |
1233,12333,123333 |
[...] |
匹配字符集的任意单一字符 |
12[abced] |
12a,12b,12c |
[x-y] |
匹配 x~y 范围中的任意单一字符 |
12[a-z] |
12a,12f |
[^…] |
匹配不在字符集的任意单一字符 |
12[^abcde] |
12f,12z |
?(*+)? |
?非贪婪匹配,在满足匹配条件的基础上尽可能少的匹配 |
?123*?4 |
124 |
d |
匹配十进制数字,相当于[0-9](D正好相反) |
?dabc |
?1abc,0abc |
w |
匹配任何字母数字字符,与[A-Za-z0-9_]相同( W 与之相反) |
waaa |
1aaa,baaa,Aaaa |
s |
匹配任何空格字符,与[ntrvf]相同( S 与之相反) |
s |
n,t |
b? |
匹配任何单词边界( B 与之相反) |
bis |
is,isStr |
A(Z) |
匹配字符串的起始(结束) |
ADear |
Dear |
?
?
?
?
?
?
?
?
?
?
?
?
?
?
?
?
?
?
?
?
?
?
?
?
?
?
二,Python re 模块
方法/函数 |
描述 |
compile(pattern, flags = 0) |
使用任何可选的标记来编译正则表达式的模式,然后返回一个正则表达式对象 |
match(pattern, string, flags=0) |
使用带有可选的标记的正则表达式的模式来从String开始位置匹配字符串。如果匹配成功,就返回 匹配对象; 如果失败,就返回 None |
?search(pattern,string, flags=0) |
使用可选标记搜索字符串中第一次出现的正则表达式模式。 如果匹配成功,则返回匹配对象; 如果失败,则返回 None |
?findall(pattern, string [,flags] ) |
?查找字符串中所有(非重复)出现的正则表达式模式,并返回一个匹配列表 |
?split(pattern, string, max=0) |
?根据正则表达式的模式分隔符, split 函数将字符串分割为列表,然后返回成功匹配的 列表,分隔最多操作 max 次(默认分割所有匹配成功的位置) |
?sub(pattern, repl, string, count=0) |
?使用 repl 替换所有正则表达式的模式在字符串中出现的位置,除非定义 count, 否则就 将替换所有出现的位置 |
?group(num=0) |
?返回整个匹配对象,或者编号为 num 的特定子组 |
?groups(default=None) |
?返回一个包含所有匹配子组的元组(如果没有成功匹配,则返回一个空元组) |
?groupdict(default=None) |
?返回一个包含所有匹配的命名子组的字典,所有的子组名称作为字典的键 |
?
?
?
?
?
?
?
?
?
?
?
?
?
?
?
?
?
?
?
常用的模块属性
re.I、 re.IGNORECASE |
不区分大小写的匹配 |
re.L、 re.LOCALE |
根据所使用的本地语言环境通过w、 W、 b、 B、 s、 S 实现匹配 |
re.M、 re.MULTILINE |
^和$分别匹配目标字符串中行的起始和结尾,而不是严格匹配整个字符串本身的起始和结尾 |
re.S、 rer.DOTALL |
“.” (点号)通常匹配除了n(换行符)之外的所有单个字符;该标记表示“.” (点号)能够匹配全部字符 |
re.X、 re.VERBOSE |
通过反斜线转义, 否则所有空格加上#(以及在该行中所有后续文字)都被忽略,除非在一个字符类中或者允许注释并且提高可读性 |
?
?
?
?
?
?
?
?
?
?
?
三,实例
1.match()方法, 从字符串开始匹配,匹配成功返回匹配对象,否则返回None
>>> m = re.match(‘foo‘,‘foo‘) ? ? ? ? ? # 模式匹配字符串
>>> if m is not None: ? ? ? ? ? ? ? ? ? ? ?# 如果匹配成功,就输出匹配内容
... m.group()
?输出:foo
>>> m = re.match(‘foo‘,‘bar‘) ? ? ? ? ?# 模式并不能匹配字符串
>>> if m is not None: m.group() ? ? ?# ?如果省去if,报AttributeError 异常
?
2.search()在一个字符串中查找模式
>>>? m = re.search(‘foo‘,‘seafood‘)
>>>? ?if m is not None :
? ? ? ? ? ?m.group()
3.?匹配多个字符串
>>> bt = ‘bat|bet|bit‘ ? ? ? ? ? ? ?# 正则表达式模式: bat、 bet、 bit
>>> m = re.match(bt,‘bat‘) ? # ‘bat‘ 是一个匹配
?
4.?匹配任何单个字符
>>> anyend = ‘.end‘
>>> m = re.match(anyend,‘bend‘) ? ? # 点号匹配 ‘b‘
?
5.?重复、特殊字符以及分组
>>> m = re.match(‘www-ddd‘,‘abc-123‘)#匹配成功
>>> m = re.match(‘www-ddd‘,‘abc-xyz‘) ?#匹配失败
?
>>> m = re.match(‘(www)-(ddd)‘,‘abc-123‘)
>>> m.group() # 完整匹配
‘abc-123‘
>>> m.group(1) # 子组 1
‘abc‘
>>> m.group(2) # 子组 2
‘123‘
>>> m.groups() # 全部子组
(‘abc‘,‘123‘)
?
>>> m = re.match(‘(a(b))‘,‘ab‘) # 两个子组
>>> m.group() # 完整匹配
‘ab‘
>>> m.group(1) # 子组 1
‘ab‘
>>> m.group(2) # 子组 2
‘b‘
>>> m.groups() # 所有子组
(‘ab‘,‘b‘)
?
6.匹配字符串的起始
m = re.search(‘^The‘,‘The end.‘) # 匹配
?
7.findall()方法
>>> re.findall(‘car‘,‘carry the barcardi to the car‘)
[‘car‘,‘car‘,‘car‘]
?
8.使用 sub()和 subn()搜索与替换
>>> re.sub(‘[ae]‘,‘X‘,‘abcdef‘)
‘XbcdXf‘
>>> re.subn(‘[ae]‘,‘abcdef‘)
(‘XbcdXf‘,2)
?
9.split()分隔字符串
>>> re.split(‘:‘,‘str1:str2:str3‘)[‘str1‘,‘str2‘,‘str3‘]