1. import re

正则表达式在Python中表示

raw string(原生字符串)

  • 原生字符串是不包含转义字符的字符串,re 库采用的是这种字符串。表示方式是 r``'text'

例如 r``'[1-9]\d{5}'

  • re 库也可以采用string类型的字符串,但是数学麻烦

上面的就需要写成这个样r``'[1-9]``\``\d{5}'

  • 所以,当正则表达式中包含转义字符时,使用原生字符串比较稳妥

    Re库主要功能函数

    image.png

    re.rearch()

    image.png
    image.png
    1. >>> import re
    2. >>> match = re.search(r"[1-9]\d{5}", "Bit 100081")
    3. >>> if match:
    4. print(match.group(0))
    5. 100081

    re.match()

    image.png ```python

    import re match = re.match(r”[1-9]\d{5}”, “BIT 100081”) match.group(0)


AttributeError Traceback (most recent call last)

in ——> 1 match.group(0)

AttributeError: ‘NoneType’ object has no attribute ‘group’

  1. - 报错是以为 `match()` 是从字符串起始位置开始匹配,所以匹配失败。
  2. - 所以在程序中要判断变量**match**是否不为空
  3. ```python
  4. >>> match = re.match(r'[1-9]\d{5}', 100081 BIT')
  5. >>> if match:
  6. match.group(0)
  7. '100081'

re.findall()

image.png

  1. >>> import re
  2. >>> ls = re.findall(r"[1-9]\d{5}", "BIT100081 TSU100084")
  3. >>> ls
  4. ['100081', '100084']

re.split()

image.png

  1. >>> import re
  2. >>> re.split(r'[1-9]\d{5}', 'BIT100081 TSU100084')
  3. ['BIT', ' TUS', '']
  4. >>> re.split(r'[1-9]\d{5}', 'BIT100081 TSU100084', maxsplit=1)
  5. ['BIT', ' TUS100084']

re.finditer()

image.png

  1. >>> import re
  2. >>> for m in re.finditer(r'[1-9]\d{5}', 'BIT100081 TSU100084'):
  3. if m:
  4. print(m.group(0))
  5. 100081
  6. 100084

re.sub()

image.png

  1. >>> import re
  2. >>> re.sub(r'[1-9]\d{5}', ':zipcode', 'BIT100081 TSU100084')
  3. 'BIT:zipcode TSU:zipcode'

Re库的面向对象形式

image.png
image.png

  • 再在使用这个对象的6个成员函数的时候,就不需要填写 pattern 参数了

    Re库的Match对象

    1. >>> match = re.search(r'[1-9]\d{5}', 'BIT 100081')
    2. >>> if match:
    3. print(match.group(0))
    4. 100081
    5. >>> type(match)
    6. <class '_sre.SRE_Match'>

    Match对象的属性

    image.png

    Match对象的方法

    image.png

    1. >>> import re
    2. >>> m = re.search(r'[1-9]\d{5}', ':zipcode', 'BIT100081 TSU100084')
    3. >>> m.string
    4. 'BIT100081 TSU100084'
    5. >>> m.re
    6. re.compile('[1-9]\\d{5}')
    7. >>> m.pos
    8. 0
    9. >>> m.endpos
    10. 19
    11. >>> m.group(0)
    12. '100081'
    13. >>> m.start()
    14. 3
    15. >>> m.end()
    16. 9
    17. >>> m.span()
    18. (3, 9)

    Re库的贪婪匹配和最小匹配

    image.png
    image.png

  • 如何输出最短的子串呢?

image.png
image.png