在函数中调用多个编译模式以进行re.search

时间:2018-02-11 12:08:34

标签: python python-3.x

我正在尝试对函数中的多个编译模式进行重新搜索,但无法执行此操作。以下是代码:

Kotlin

获得以下错误:      TypeError:第一个参数必须是字符串或编译模式

任何人都可以告诉我如何解决这个问题吗?我最终只需要一个可以调用多个编译模式的搜索函数。

1 个答案:

答案 0 :(得分:-1)

如果有可能在将来修改它们,那么拥有正则表达式的中心位置绝对是一个好方法。但是,您还应该以的方式存储它们,以便在您使用它们时重新编译它们。你应该直接保存编译后的表达式。

执行此操作的常用方法是在模块顶部放置常量,如下所示:

RE_FOO = re.compile('…')
RE_BAR = re.compile('…')
RE_BAZ = re.compile('…')

如果你有一个正常表达式的列表,你在序列中总是使用,那么你应该把它们放在一个序列中:

RE_FOOS = [
    re.compile('…'),
    re.compile('…'),
    re.compile('…')
]

然后,当你需要使用它们时,你可以简单地迭代它们来检查它们:

for expr in RE_FOOS:
    result = expr.search(text)
    if result:
        break

# do something with result

您甚至可以使用第一个匹配的表达式创建一个辅助函数来对文本进行搜索:

def searchFoos (text):
    for expr in RE_FOOS:
        result = expr.search(text)
        if result:
             return result

# And use it directly later
result = searchFoos(text)
if result:
    # Do something with the result