正则表达式及其操作

  1. 正则表达式的概念和作用

  2. 简单的正则表达式代码事例

  3. 正则表达式模式在线图示网站

  4. 正则表达式模式(正则表达式的难点在于模式的设计)

  5. 正则表达式实例

  6. re模块函数
    • 1)、re.match( pattern,string [,flags=0] )
    • re.match 尝试从字符串的起始位置匹配一个模式,如果不是起始位置匹配成功的话,match()就返回none。

      flags是匹配模式修饰符,见下表:(了解)

      修饰符 描述
      re.I 使匹配对大小写不敏感
      re.L 做本地化识别(locale-aware)匹配
      re.M 多行匹配,影响 ^ 和 $
      re.S 使 . 匹配包括换行在内的所有字符
      re.U 根据Unicode字符集解析字符。这个标志影响 \w, \W, \b, \B.
      re.X 该标志通过给予你更灵活的格式以便你将正则表达式写得更易于理解。

      参数 描述
      pattern 匹配的正则表达式
      string 要匹配的字符串。
      flags 标志位,用于控制正则表达式的匹配方式,如:是否区分大小写,多行匹配

      返回:匹配成功re.match方法返回一个匹配对象,否则返回None。

      匹配对象方法 描述
      group(num=0) 匹配的整个表达式的字符串,group() 可以一次输入多个组号,在这种情况下它将返回一个包含那些组所对应值的元组。
      groups() 返回一个包含所有小组字符串的元组,从 1 到 所含的小组号。

      事例代码如下:

      import re
      print(re.match('www', 'www.runoob.com').span()) # 在起始位置匹配,结果:(0,3)
      print(re.match('com', 'www.runoob.com')) # 不在起始位置匹配,结果:None
      line = "Cats are smarter than dogs"
      matchObj = re.match( r'(.*) are (.*?) .*', line, re.M|re.I) # 有两个group,()
      print(matchObj.group()) # 结果:Cats are smarter than dogs
      print(matchObj.groups()) # 结果:('Cats', 'smarter')
      print(matchObj.group(1)) # 结果:Cats
      print(matchObj.group(2)) # 结果:smarter
    • 2)、re.search( pattern,string [,flags=0] )
    • 参数和返回同上

      re.search函数会在字符串内查找模式匹配,只到找到第一个匹配然后返回,如果字符串没有匹配,则返回None,参数与返回与re.match完全一致。re.match只匹配字符串的开始,如果字符串开始不符合正则表达式,则匹配失败,函数返回None;而re.search匹配整个字符串,直到找到一个匹配。

    • 3)、re.findall( pattern,string [,flags] )
    • 参数同上,返回列表,找不到则返回空列表

      text = 'apple is my love $45, apple is delicouis $56'
      ret = re.findall('\$\d+', text)
      print(ret) #['$45', '$56']
      ret = re.findall(r"html$","https://docs.python.org/3/whatsnew/3.6.html")
      print (ret) # ['html'] text = "JGod is a handsome boy ,but he is a ider"
      print(re.findall(r'\w*o\w*',text)) # 查找有o的单词
      # 输出结果为:['JGod', 'handsome', 'boy']
    • 4)、re.split( pattern,string [,flags] )
    • 参数同上;根据正则表达式的模式分隔符,split函数将字符串分割为列表,然后返回成功匹配的列表;注意:没有可匹配的项时,返回原来的字符串。

      import re
      s = 'abc, abc, defg, dds'
      print(re.split('\W+',s)) # 相当于以非字母数字下划线分割 ['abc', 'abc', 'defg', 'dds']

      # 如果加上括号,结果会同时返回去掉的值
      print(re.split('(\W+)',s)) # ['abc', ', ', 'abc', ', ', 'defg', ', ', 'dds']
    • 5)、re.complie(pattern [, flags])
    • re.compile 函数用于编译正则表达式,生成一个正则表达式( re.Pattern )对象,供以上使用.

      调模式为:pattern.函数名(string [,flags])。

      import re
      text = 'Hello World Wide Web'
      pattern = re.compile(r'([a-z]+) ([a-z]+)', re.I) # pattern为编译后的模式对象 re.I 表示忽略大小写
      m = pattern.match(text)
      print(m.groups()) # 匹配成功,返回一个 Match 对象,结果:('Hello', 'World')
      m = pattern.search(text)
      print(pattern.findall(text)) # [('Hello', 'World'), ('Wide', 'Web')]

      text = 'python 123 google 456 aa'
      pattern = re.compile(r'\d+') # 查找数字
      result1 = pattern.findall(text)
      print(result1) # ['123', '456']
      print(pattern.split(text)) # ['python ', ' google ', ' aa']

  7. 正则表达式应用
  8. 课外阅读:网络爬虫
  9. 正则表达式常用模式如下: