re模块

^:匹配字符串的开头
$:匹配字符串的末尾。
\A:匹配字符串的开头
\Z:匹配字符串的末尾
.:匹配任意字符,除了换行符,当re.DOTALL标记被指定时,则可以匹配包括换行符的任意字符。
[...]:用来表示一组字符,单独列出:[amk] 匹配 'a','m'或'k'
[^...] : 不在[]中的字符:[^abc] 匹配除了a,b,c之外的字符。
re*: 匹配0个或多个的表达式。
re+:匹配1个或多个的表达式。 有几个匹配几个
re?: 匹配0个或1个由前面的正则表达式定义的片段,非贪婪方式 只匹配符合条件最少字符
re{ n}:精确匹配 n 个前面表达式。例如, o{2} 不能匹配 "Bob" 中的 "o",但是能匹配 "food" 中的两个 o。
re{ n,}:匹配 n 个前面表达式。例如, o{2,} 不能匹配"Bob"中的"o",但能匹配 "foooood"中的所有 o。
'|':匹配|左或|右的字符,re.search('abc|ABC','ABCBabcCD').group()) 返回结果ABC
(re):对正则表达式分组并记住匹配的文本
"o{1,}" 等价于 "o+"。"o{0,}" 则等价于 "o*"。
(?imx):正则表达式包含三种可选标志:i, m, 或 x 。只影响括号中的区域。
[a-z]:匹配a-z之间任意字符 [0-9] [A-Z] 相同
[^a-z] :匹配除a-z之间的数
\d :匹配任意数字等价[0-9]
\D:匹配一个非数字 [^0-9]
\w :匹配包括下划线的任何单词字符。等价于'[A-Za-z0-9_]'。
\W:匹配任何非单词字符。等价于 '[^A-Za-z0-9_]'。
\s:匹配任何空白字符,包括空格、制表符、换页符等等。等价于 [ \f\n\r\t\v]。
\S:匹配任何非空白字符。等价于 [^ \f\n\r\t\v]。

匹配三种方法:  
  
re.match(正则表达式,字符串) 从头开始匹配的
  re.search():匹配到一个就返回,匹配不到返回空
  re.findall:返回所有匹配结果,findall没有group()方法
  re.split():分割
  re.sub():替换

  例子:
    print(re.match('[0-9]{1,3}','aaalb345d67b')) # None
    print(re.search('[0-9]{1,3}','aaalb345d67b')) # <_sre.SRE_Match object; span=(5, 8), match='345'>
    print(re.findall('[0-9]{1,3}','aaalb345d67b')) # ['345', '67']

具体每种匹配规则的实例:
  print(re.match('aaa?','aaalb345d67b')) # <_sre.SRE_Match object; span=(0, 3), match='aaa'>
  
print(re.match('^a','aaalb345d67b')) #<_sre.SRE_Match object; span=(0, 1), match='a'>
  print(re.search('b$','aaalb345d67b')) #<_sre.SRE_Match object; span=(11, 12), match='b'>
  print(re.match('a.','aaalb345d67b')) #<_sre.SRE_Match object; span=(0, 2), match='aa'>
  print(re.match('a*','aaalb345d67b')) # <_sre.SRE_Match object; span=(0, 3), match='aaa'>
  print(re.match('a+','aaalb345d67b')) #<_sre.SRE_Match object; span=(0, 3), match='aaa'>
  print(re.match('a.+','aaalb345d67b')) # <_sre.SRE_Match object; span=(0, 12), match='aaalb345d67b'>
  print(re.match('a.*','aaalb345d67b')) # <_sre.SRE_Match object; span=(0, 12), match='aaalb345d67b'>

  print(re.findall('a{2}','aaalb345d67b')) # <_sre.SRE_Match object; span=(0, 2), match='aa'>
  print(re.search('abc|ABC','ABCBabcCD')) # <_sre.SRE_Match object; span=(0, 3), match='ABC'>
  print(re.search('abc|ABC','ABCBabcCD').group()) # ABC
  # findall没有group()方法
  print(re.findall('abc|ABC','ABCBabcCD')) # ['ABC', 'abc']

分组匹配: 
  group() 
  
  line = "Cats are smarter than dogs"
  # r代表为非转义的原始字符串
  matchObj = re.match( r'(.*) are (.*?) .*', line, re.M|re.I)
  if matchObj:
  #matchObj.group() 等同于 matchObj.group(0),表示匹配到的完整文本字符
  print("matchObj.group() : ", matchObj.group()) # Cats are smarter than dogs
  # (.*) 第一个匹配分组,.* 代表匹配除换行符之外的所有字符
   print ("matchObj.group(1) : ", matchObj.group(1)) #Cats
  # (.*?) 第二个匹配分组,.*? 后面多个问号,代表非贪婪模式,也就是说只匹配符合条件的最少字符 0个或1个
   print ("matchObj.group(2) : ", matchObj.group(2)) #smarter
  else:
  print ("No match!!")


  
'(?P...)' 分组匹配
  
  print(re.search('(?P<id>[0-9]+)','abcd1234daf034').group()) # 1234

  s = '1102231990xxxxxxxx'
  res = re.search('(?P<province>\d{3})(?P<city>\d{3})(?P<born_year>\d{4})',s)
  print(res.groupdict()) #{'province': '110', 'city': '223', 'born_year': '1990'}

分割和替换:
  # 分割:re.split(正则表达式,字符串)
  print(re.split('[0-9]+','abc12de3f45GH')) # ['abc', 'de', 'f', 'GH']
  # 替换:re.sub(正则表达式,替换值,字符串)
  print(re.sub('[0-9]+','s','abc12de3f45GH')) # abcsdesfsGH

  

posted @ 2019-12-09 20:23  爱语默  阅读(225)  评论(0编辑  收藏  举报