Loading...
墨滴

Donsole

2021/05/09  阅读:37  主题:前端之巅同款

Python标准库概览(3):re 正则表达式 下篇

正则表达式是使用形式语法描述的文本匹配模板。模板被解释为一组指令,然后使用字符串作为输入执行以产生匹配的子集或原始版本的修改版本。“正则表达式”通常缩写为"regex"或“"regexp"。表达式可以包括文字匹配,重复,模板组成,分支和其他复杂的规则。与创建专用的词法分析器和解析器相比,使用正则表达式更容易解决大量的文本解析问题。 Python的 re 正则表达式标准库是Python中处理不规范字符串的利器,让我们来从头学习一下Python的正则表达式吧!


01、查找重复字符

有五种方式来表达一种模式中的重复。元字符后面的模式重复零次或多次。如果将替换为+,则该模式必须至少出现一次。使用?表示模式显示为零或一次。对于特定的出现次数,请{m}在模式后使用,其中m模式应重复的次数。最后,要允许可变但重复次数有限,请使用{m,n},其中m是最小重复次数,n是最大重复次数。省略n({m,})表示该值必须至少出现m几次,没有最大值。

import re

def test_patterns(text, patterns):
    for pattern, desc in patterns:
        print("'{}' ({})\n".format(pattern, desc))
        print("  '{}'".format(text))
        for match in re.finditer(pattern, text):
            s = match.start()
            e = match.end()
            substr = text[s:e]
            n_backslashes = text[:s].count('\\')
            prefix = '.' * (s + n_backslashes)
            print("  {}'{}'".format(prefix, substr))
        print()
    return

test_patterns(
    'abbaabbba',
    [('ab*''a followed by zero or more b'),
     ('ab+''a followed by one or more b'),
     ('ab?''a followed by zero or one b'),
     ('ab{3}''a followed by three b'),
     ('ab{2,3}''a followed by two to three b')],
)

输出:

'ab*' (a followed by zero or more b)

  'abbaabbba'
  'abb'
  ...'a'
  ....'abbb'
  ........'a'

'ab+' (a followed by one or more b)

  'abbaabbba'
  'abb'
  ....'abbb'

'ab?' (a followed by zero or one b)

  'abbaabbba'
  'ab'
  ...'a'
  ....'ab'
  ........'a'

'ab{3}' (a followed by three b)

  'abbaabbba'
  ....'abbb'

'ab{2,3}' (a followed by two to three b)

  'abbaabbba'
  'abb'
  ....'abbb'

02、按字符集查找文本

字符集是一组字符,其中的任何一个可以匹配在模式这一点。例如,[ab]将匹配a或b

import re

def test_patterns(text, patterns):
    for pattern, desc in patterns:
        print("'{}' ({})\n".format(pattern, desc))
        print("  '{}'".format(text))
        for match in re.finditer(pattern, text):
            s = match.start()
            e = match.end()
            substr = text[s:e]
            n_backslashes = text[:s].count('\\')
            prefix = '.' * (s + n_backslashes)
            print("  {}'{}'".format(prefix, substr))
        print()
    return

test_patterns(
    'abbaabbba',
    [('[ab]''either a or b'),
     ('a[ab]+''a followed by 1 or more a or b'),
     ('a[ab]+?''a followed by 1 or more a or b, not greedy')],
)

输出:

'[ab]' (either a or b)

  'abbaabbba'
  'a'
  .'b'
  ..'b'
  ...'a'
  ....'a'
  .....'b'
  ......'b'
  .......'b'
  ........'a'

'a[ab]+' (a followed by 1 or more a or b)

  'abbaabbba'
  'abbaabbba'

'a[ab]+?' (a followed by 1 or more a or b, not greedy)

  'abbaabbba'
  'ab'
  ...'aa'

今天和大家一起学习了Python中的标准库 re 正则表达式 上篇,大家都学会了吗? 欢迎大家关注,一起学习Python吧!

Donsole

2021/05/09  阅读:37  主题:前端之巅同款

作者介绍

Donsole