Python中的正则

发布时间:2019-04-09 21:16:49编辑:auto阅读(1582)

    regex_lst = [

      ('字符组',),

      ('非打印字符',),

      ('特殊字符',),

      ('定位符',),

      ('限定符',),

      ('re模块',),

      ('分组命名',),

      ('或匹配',),

      ('贪婪匹配与惰性匹配',),

    ]

     

    字符组

      [0-9]

      [a-z]

      [A-Z]

      [^a]

    非打印字符

      \w     匹配字母,数字,下划线  word

      \s      匹配空字符          space

      \d   匹配数字           digit

    特殊字符

      .        匹配除换行符 \n 之外的任何单字符

    定位符

      ^  匹配字符串的开始位置

      $    匹配字符串的结尾位置

    限定符

      *      0次或多次

      +     1次或多次

      ?     0次或1次

      {n}   n次

      {n,}  n次或多次

      {n,m}    n次至m次

     

    re模块

      re_lst = [

        ('re.compile(regex)',),

        ('re.findall(pattern, str)',),

        ('re.finditer(pattern, str)',),

        ('re.search(pattern, str)',),

      ]

    re.compile(regex)

    1 import re
    2 
    3 """
    4 re.compile(regex)
    5     编译一个正则表达式模式,返回一个模式对象
    6 """
    7 regex = r'[a-z]'
    8 pattern = re.compile(regex)

    re.findall(pattern, str)

     1 import re
     2 
     3 """
     4 re.findall(pattern, str)
     5     返回所有满足匹配条件的结果,并放到列表中
     6 """
     7 regex = r'[a-zA-Z]+'
     8 s = 'Hello Python'
     9 pattern = re.compile(regex)
    10 
    11 lst = re.findall(pattern, s)
    12 print(lst)    # ['Hello', 'Python']

    re.finditer(pattern, str)

     1 import re
     2 
     3 """
     4 re.finditer(pattern, str)
     5     返回迭代器
     6     迭代器中每一个元素需要调用group(),得到结果
     7 """
     8 regex = r'[a-zA-Z]+'
     9 s = 'Hello Python'
    10 pattern = re.compile(regex)
    11 
    12 iterator = re.finditer(pattern, s)
    13 
    14 print(iterator)    # <callable_iterator object at 0x000001FDB3F29BE0>
    15 
    16 for i in iterator:
    17     print(i.group())

    re.search(pattern, str)

     1 import re
     2 
     3 """
     4 re.search(pattern, str)
     5     返回满足匹配条件的第一个结果对象
     6 """
     7 regex = r'[a-zA-Z]+'
     8 s = 'Hello Python'
     9 pattern = re.compile(regex)
    10 
    11 obj = re.search(pattern, s)
    12 
    13 if obj:
    14     print(obj.group())

    分组命名

     1 import re
     2 
     3 """
     4 flags
     5     re.I    忽略大小写
     6     re.M    多行模式,改变^和$的行为
     7     re.S    .可以匹配任意字符,包括换行符
     8 """
     9 regex = r'<dd>.*?title="(?P<title>.*?)".*?</dd>'
    10 s = '<dd><a href="#" title="Python中的正则">...</a></dd>'
    11 pattern = re.compile(regex, re.S)
    12 
    13 iterator = re.finditer(pattern, s)
    14 
    15 for i in iterator:
    16     print(i.group('title'))

    或匹配

     1 import re
     2 
     3 """
     4 取消分组
     5     (?:)
     6 或匹配
     7     long|short
     8 """
     9 regex = r'www.(?:page|hopen).com'
    10 s = 'www.hopen.com'
    11 pattern = re.compile(regex)
    12 
    13 iterator = re.finditer(pattern, s)
    14 
    15 for i in iterator:
    16     print(i.group())

    贪婪匹配与惰性匹配

     1 import re
     2 
     3 
     4 def get_data(regex, s):
     5     pattern = re.compile(regex)
     6     obj = re.search(pattern, s)
     7     if obj:
     8         return obj.group()
     9 
    10 
    11 # 贪婪匹配
    12 regex_greedy = r'<.*>'
    13 # 惰性匹配
    14 regex_lazy = r'<.*?>'
    15 content = '<a href="#">...</a>'
    16 
    17 ret_1 = get_data(regex_greedy, content)
    18 ret_2 = get_data(regex_lazy, content)
    19 print(ret_1)    # <a href="">...</a>
    20 print(ret_2)    # <a href="">

     

      

关键字