Python 正则
- ? 匹配零次或一次前面的字符或分组
- * 匹配零次或多次前面的字符或分组
- + 匹配一次或多次前面的字符或分组
- {n} 匹配n次前面的字符或分组
- {n,} 匹配n次或更多次前面的字符或分组
- {,m} 匹配零次或m次前面的字符或分组
- {n,m} 匹配至少n次,最多m次前面的字符或分组
- {n,m}? 或 *? 或+? 对前面的字符或分组进行非贪心匹配
- ^spam 字符串必须以spam开始
- spam$ 字符串必须经spam结束
- . 匹配所有字符,换行符除处
- \d、\w、\s 分别匹配数字、单词、空格
- \D、\W、\S 分别匹配出数字、单词、空格以外的所有字符
- [abc] 匹配方括号内的任意字符(如a、b 或c)
- [^abc] 匹配不在方括号内的任意字符
利用'()'括号分组,使用group(n)\groups()匹配对象方法,从分组中获取匹配的文本:
>>> num = re.compile(r'(\d{4})-(\d{7})')
>>> my = num.search('my number is 0310-5561921')
>>> my.groups()
('0310', '5561921')
>>> my.group(1)
'0310'
>>> my.group(2)
'5561921'
利用 '|' 管道匹配多个分组
# 当希望匹配多个管道中的一个时
>>> name = re.compile(r'lisi|wangwu')
>>> myname = name.search('myname is lisi')
>>> myname.group()
'lisi'
>>> myname = name.search('my name is wangwu,your name is lisi')
>>> myname.group()
'wangwu'
利用 '?' 实现可选匹配
>>> num = re.compile(r'(\d{4}-)?\d{7}')
>>> mynum = num.search('0310-5561921')
>>> mynum.group()
'0310-5561921'
>>> mynum = num.search('5561921')
>>> mynum.group()
'5561921'
seach()方法:返回一个match对象,包含被查找字符串的第一次匹配文本
findall()方法:返回一组字符串,包含被查找对象的所有区配
>>> num = re.compile(r'\d{4}-\d{7}')
>>> num.findall("my host num is '0311-5561931',my work num is '0310-5923111'")
['0311-5561931', '0310-5923111']