Regular expression in Python3 Link to heading

credit from 廖雪峰的官网

  • 常见表达

\d — 用来匹配数字(digit)

\w — 用来匹配字母或数字(Word)

\s — 用来匹配空格(space)

. — 用来匹配任意字符

* — 匹配>=0个字符

+ — 匹配>0个字符

? — 匹配0或1个字符

{n, m} — 表示 n-m 个字符, 通常和\d,\w,\s搭配着用

[] — 表示范围. eg: [a-zA-Z\_][0-9a-zA-Z\_]*可以匹配由字母或下划线开头,后接任意个由一个数字、字母或者下划线组成的字符串,也就是Python合法的变量;

A|B — 可以匹配A或B

^ — 表示行的开头

$ — 表示行的结束

  • re 模块

    • 使用 r 前缀, 不考虑转译的问题. eg:
    s = r'ABC\-001' # Python的字符串
    # 对应的正则表达式字符串不变:
    # 'ABC\-001'
    
    • 使用 match() 来判断是否匹配成功, 成功则返回一个 Match 对象, 否则, 返回 None

    • 切分字符串用 split(). 除了切分, 还可以用()表示要提取的分组 eg:

    >>> m = re.match(r'^(\d{3})-(\d{3,8})$', '010-12345')
    >>> m.group(0)
    '010-12345'
    >>> m.group(1)
    >>> m.group(2)
    

    group(0)永远是原始字符串

    • python 默认正则匹配是贪婪匹配, 如果想要取消贪婪匹配, 需要在后面加?

    eg:

    >>> re.match(r'^(\d+)(0*)$', '102300').groups()
    ('102300', '')
    >>> re.match(r'^(\d+?)(0*)$', '102300').groups()
    ('1023', '00')
    
    • python 在使用正则表达式的时候, re 模块会做两件事, 1. compile 正则表达式; 2. match 字符串

    所以在一个正则表达式要重复使用几千次的时候, 先 compile 就可以提升效率

    re_prime = re.complie(r'^$')