在函数中调用多个编译模式检索

2024-04-26 10:31:38 发布

您现在位置:Python中文网/ 问答频道 /正文

我想做一个检索一个函数中的多个编译模式,但不能这样做。代码如下:

def regex_parameters1():
    a = re.compile(r're1')
    b = re.compile(r're2')
    c = re.compile(r're3')
    d = re.compile(r're4')
    e = re.compile(r're5')
test = re.search(regex_parameters1, text)
for i in test
  if i is not None:
     print(i.group())

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

谁能告诉我怎么做吗?我最终只需要一个可以调用多个编译模式的搜索函数。你知道吗


Tags: 函数代码testresearchdef模式regex
1条回答
网友
1楼 · 发布于 2024-04-26 10:31:38

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

一种常见的方法是在模块顶部设置常量,如下所示:

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

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

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

相关问题 更多 >