python正则表达式

  1. 正则表达式符号使用小总结:

    1、[ ]:方括号。匹配需要的字符集合,如[1-3]或[123]都是匹配1、2或者3。

    2、^:脱字符号。方括号中加入脱字符号,就是匹配未列出的所有其他字符,如[^a]匹配除a以外的所有其他字符。

    3、\:反斜杠。和python字符串使用规则一样,可以匹配特殊字符本身,如\d表示匹配0到9的任意一个数字字符,而\\d则表示匹配\d本身。

    4、*:星号。匹配前一个字符0到n次,如pytho*n可以匹配pythn、pytoon、pythooooon等。还有其它匹配重复字符的如?、+或{m,n},其中{n,m}可以灵活使用,它表示匹配n次到m次

  2. (?<name>exp) 匹配 exp,并捕获文本到名称为 name 的组里,也可以写成 (?'name'exp)。

    但是在Python中,为 (?P<name>exp)。 简单例子:

    import re
    
    pattern = re.compile(r'(?P<here>[a-z]+) ([a-z]+)', re.I)
    m = pattern.match('Hello World word helo')
    print (m.group('here'))

    输出结果为:

    Hello

    命名组是便于使用的,可以替代需要记住组的数字,可以进行扩展使用。

  3.  \b 的用法也可以很灵活,在给定的字符串中,找到以小写字母开头的单词和单词数量。

    import re
    
    s="i Am a gOod boy  baby!!"
    result=re.findall(r'\b[a-z][a-zA-Z]*\b',s)
    print(result)
    print("小写字母开头的单词个数:",len(result))

    结果:

    ['i', 'a', 'gOod', 'boy', 'baby']
    小写字母开头的单词个数: 5
  4. Python3 匹配 IP 地址实例

    import re
    ip ='192.168.1.1'
    trueIp =re.search(r'(([01]{0,1}\d{0,1}\d|2[0-4]\d|25[0-5])\.){3}([01]{0,1}\d{0,1}\d|2[0-4]\d|25[0-5])',ip)
    print(trueIp)

    输出结果:

    192.168.1.1
  5. re.sub 匹配标点符号、换行。

    import re
    s = "you're asking me out.that's so cute.what's your name again?"
    print(re.sub(r"([.!?])", r"\1\n", s))

    输出结果:

    you're asking me out.
    that's so cute.
    what's your name again?
  6. Python re 模块的 sub 方法:re.sub()。

    用法:

    re.sub(pattern, repl, string, count=0, flags=0)

    在这里会容易出现的问题是,错误的将 flags 参数传入 count,例:

    >>> re.sub('123.*', '123*', '123ab\nc', re.S)
    '123*\nc'

    是不是没有替换掉换行符后的字符?

    正确的写法应该是当使用 re.sub() 的可选参数时,要传入所有可选参数。或者指定参数名,如下:

    >>> re.sub('123.*', '123*', '123ab\nc', 0, re.S)
    '123*'
    >>> re.sub('123.*', '123*', '123ab\nc', flags = re.S)
    '123*'

    2)re.Pattern.sub()

    re.Pattern 对象是匹配模对象,由 re.compile() 生成。

    用法:

    re.Pattern.sub(repl, string, count=0)

    接上例:

    >>> regex = re.compile('123.*', re.S)
    >>> regex.sub('123*', '123ab\nc')
    '123*'

    这里 re.Pattern.sub() 不接受 flags 参数,因为 flags 是由 re.compile() 指定。

  7.  假如文本有个单纯重复了 2 次,利用正则保留一个输出:

    >>> import re
    >>> x='this is is ok ok'
    >>> y= re.sub(r'(\w+)\s\1',r'\1',x)
    >>> print(y)
    this is ok
    >>>
posted @ 2020-12-05 23:01  富贵儿-  阅读(77)  评论(0编辑  收藏  举报