正则表达式系列(二):匹配一组字符中任一字符

准备说明

1.实例中正则表达式来源于《精通正则表达式》一书

2.正则表达式实现方式为Python3.7


1.匹配一组字符中任一字符

实例:

import re





def main():

    s1 = 'Iraqi'

    s2 = 'Iraq'

    s3 = 'Qantas'

    pattern = re.compile('.*q[^u].*', re.I)

    match1 = re.match(pattern, s1)

    print(match1)

    match2 = re.match(pattern, s2)

    print(match2)

    match3 = re.match(pattern, s3)

    print(match3)





if __name__ == '__main__':

    main()


其中s2是无法匹配的,说明[]中必须要匹配一字符。


2.范围

[]中可以用-表示一组字符,如:[a-z0-9]可以匹配任一小写字母和数字。

>>> s = "123Abc"

>>> re.findall(r"[a-z0-9]", s)

['1', '2', '3', 'b', 'c']

>>> re.findall(r"[a-z0-9]+", s)

['123', 'bc']


3.特殊字符

[]中的正则表达式特殊字符不再具有特殊作用,如:[(+*)]表示匹配(+*)任一字符。

>>> s = "(1 + 2) * 3"

>>> re.findall(r"[()*]", s)

['(', ')', '*']

>>> 


4.接受正则集合表示

[]中特殊字符没有原来特殊意义,但接受正则表达式集合表示。如:\d表示任一数字,\w表示任一字符。

>>> s = "(123+)"

>>> re.findall(r"[\w+]", s)

['1', '2', '3', '+']


表达式中+只是字符,没有特殊意义。


5.[]中的特殊字符^

特殊字符^[]中表示逻辑非,不匹配这组中任何字符。但它只能在首位,不在首位的^只是一个字符,无特殊意义。

>>> s = '(123+)'

>>> re.findall(r"[^123]", s)

['(', '+', ')']

>>> s = '(123+^)'

>>> re.findall(r"[^123^]", s)

['(', '+', ')']

>>> re.findall(r"[^123]", s)

['(', '+', '^', ')']

>>> 


6.[]中的[]

如果想要在[]中匹配[或者],需要用反斜杠标注。

>>> s = "1 * [(2 + 3)]"

>>> re.findall(r"[\[\]()]", s)

['[', '(', ')', ']']

>>> 


 

展开阅读全文