python正则表达式
1.常见表示符:
字符 |
功能 |
. |
匹配任意1个字符(除了
) |
[ ] |
匹配[ ]中列举的字符 |
d |
匹配数字,即0-9 |
D |
匹配非数字,即不是数字 |
s |
匹配空白,即 空格,tab键 |
S |
匹配非空白 |
w |
匹配单词字符,即a-z、A-Z、0-9、_ |
W |
匹配非单词字符 |
字符 |
功能 |
* |
匹配前一个字符出现0次或者无限次,即可有可无 |
+ |
匹配前一个字符出现1次或者无限次,即至少有1次 |
? |
匹配前一个字符出现1次或者0次,即要么有1次,要么没有; 在"*","?","+","{m,n}"后面加上?,使贪婪变成非贪婪 |
{m} |
匹配前一个字符出现m次 |
{m,} |
匹配前一个字符至少出现m次 |
{m,n} |
匹配前一个字符出现从m到n次 |
字符 |
功能 |
^ |
匹配字符串开头 |
$ |
匹配字符串结尾 |
|
匹配一个单词的边界 |
B |
匹配非单词边界 |
2.常见方法:
- re.match('xxx',str):
能够匹配出以xxx开头的字符串
>>> import re
# 匹配以12开头的字符串,如果匹配成功,返回一个对象,匹配失败则返回None。
>>> print(re.match('12','123456'))
<_sre.SRE_Match object; span=(0, 2), match='12'>
>>> print(re.match('12','0123456') )
None
# re.match返回的对象拥有group()方法,返回匹配到的字符串
>>> re.match('1.?','123456').group()
12
- .group()返回匹配到的字符串。
- .groups()返回匹配分组时匹配到的字符串的元组。
- .group(0)等同于.group()
- .group(1)等同于.groups()[0]
- .group(n)等同于.groups()[n-1]
- re.search('xxx',str):
re.match只能够匹配出以xxx开头的字符串,search可以全文中匹配出xxx字符串。
>>> re.search('1.?','ss123456').group()
12
>>> re.match('1.?','ss123456').group()
AttributeError
- re.findall('xxx',str):
匹配出字符串中所有的匹配项,不过返回值不是一个正则对象,而是一个列表。
>>> re.findall('1.?','jiao1awo15guan16ren')
['1a', '15', '16']
- re.split('xxx',str):
分给字符串,不过分割符是正则表达式。
>>> re.split('1.?','jiao1awo15guan16ren')
['jiao', 'wo', 'guan', 'ren']
- re.sub('xxx','yyy',str):
将所有被xxx匹配到的字符串都替换成yyy(可以给匹配到的内容命名,替换时再重用)
>>> re.sub('1.?',' T-T ','jiao1awo15guan16ren')
'jiao T-T wo T-T guan T-T ren'
>>> re.sub(r'{{(?P<name1>w*?)}}', 'g<name1>', '{{wol}} > 1')
'wol > 1'
3.匹配分组:
字符 |
功能 |
| |
匹配左右任意一个表达式 |
(ab) |
将括号中字符作为一个分组 |
umber |
引用分组num匹配到的字符串 |
(?P) |
分组起别名 |
(?P=name) |
引用别名为name分组匹配到的字符串 |
# 匹配1~100.
>>> re.match("[1-9]?d$|100","100")
# 匹配是否符合html标签
>>> re.match(r"<(w*)><(w*)>.*</2></1>", "<html><h1>www.itcast.cn</h1></html>")
# 匹配是否符合html标签:方法er
>>> ret = re.match(r"<(?P<name1>w*)><(?P<name2>w*)>.*</(?P=name2)></(?P=name1)>", "<html><h1>www.itcast.cn</h1></html>")
>>> ret.group()
'<html><h1>www.itcast.cn</h1></html>'
>>> ret.groups()
('html', 'h1')