Python 寻找匹配模式

Python 寻找匹配模式,上述这种创建多个条件集合的技术也可以配合正则表达式使用。回想一下,模式的match()方法或search()方法会返回一个匹配对象或者None值。可以在程序中利用这一点,如下所示:

import re
p1 = re.compile(r"(some) pattern")
p2 = re.compile(r"a (different) pattern")

from typing import Optional, Match
def matcher(text: str) -> Optional[Match[str]]:
    patterns = [p1, p2]
    matching = (p.search(text) for p in patterns)
    try:
        good = next(filter(None, matching))
        return good
    except StopIteration:
        pass

上面定义了两种模式,并将它们应用于给定的文本块。每个模式都有一个用()标记的子模式来作为模式匹配组。

函数matcher()会构建一系列可选模式。在本例中,它是一组简单文本对的模式。我们用生成器表达式将每个模式中的search()方法应用于所提供的文本。由于生成器表达式是惰性求值的,因此它不会即刻执行一长串连续的模式匹配,而会先使用已得到的结果。

None作为第一个参数的filter()函数会从数据序列中去除所有的None值。filter(None, S)得到的值与filter(lambda item: item is not None, S)得到的值相同。

函数next()会从函数filter()返回的可迭代结果中获取第一个非空值。如果filter()函数没有返回任何结果,则表示没有与之匹配的模式。在这种情况下,异常值转换为了None结果。由于没有与给定文本匹配的模式,因此引发一个自定义的异常或许是明智的做法。

与先前的示例一样,这里展示了如何对多个布尔条件进行求值并从中选取一个真值。由于输入的是一个模式序列,因此不同函数的求值顺序是定义好的,并且严格按照顺序执行。尽管无法摆脱Python的严格求值顺序,但是一旦找到某个匹配的模式,便可以立即退出函数来控制求值的成本。

Python教程

Java教程

Web教程

数据库教程

图形图像教程

大数据教程

开发工具教程

计算机教程