【发布时间】:2023-04-09 11:02:01
【问题描述】:
设置
我动态创建一个正则表达式列表,即regex_list。
列表中的每个正则表达式都肯定至少与应用的文本匹配。
列表中的某些正则表达式可能会相等。
regex_list = []
for f in foo: # foo is a list of strings e.g. foo = ['foo1', 'foo2', 'foo1', ...]
# f is a valid expression to be used inside the regex
regex_list.append(f'[^.]*?{f}[^.]*\.')
regex = re.compile('|'.join(regex_list), flags=re.DOTALL)
result = re.findall(regex, text)
问题
自从
-
regex_list中的某些正则表达式可能等于 -
regex_list中的正则表达式与 OR 运算符组合在一起
对于列表中存在另一个副本的正则表达式,仅捕获文本中的第一个匹配项。
问题
一种解决方法是使用 for 循环单独应用每个正则表达式,但它非常慢。
有没有一种结合正则表达式并使它们尽可能匹配的好方法?
【问题讨论】:
-
foo里面有什么?几个例子就可以了。但是,您似乎只有需要在文本上一一执行的独立正则表达式。 -
foo是一个字符串列表。例如foo = ['foo1', 'foo2', 'foo1', ...] -
喜欢
['John', 'John Doe', 'John Doe Junior']? -
是的,我添加了一个示例
-
好的,您将可以使用this approach。也许,使用overlapping regex,您可以更接近。但是,
[^.]*?{f}[^.]*\.模式意味着[^.]可能会吃掉任何其他潜在的匹配项。恐怕你需要对匹配进行后期处理。
标签: python regex optimization re findall