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']

posted @ 2017-11-15 11:29  考鸡蛋  阅读(179)  评论(0编辑  收藏  举报