【发布时间】:2021-07-16 13:47:23
【问题描述】:
我找不到一种将多个正则表达式写入一个中的好方法,以便针对所有子正则表达式检查输入字符串,如下所示:
def match(input_str: str, regexp: str) -> bool:
...
print(match('abaaca', '.*aba.*<AND>.*aca.*')) # True
print(match('abaca', '.*aba.*<AND>.*aca.*')) # True, it doesn't matter that one letter a is shared
print(match('abac', '.*aba.*<AND>.*aca.*'). # False
有什么办法比解析正则表达式看看里面有没有<AND>,把字符串分成几个子正则表达式循环匹配?
UPD:需要明确的是,我正在寻找一种将其用作全功能运算符的方法,例如 ((a<AND>b)|(c<AND>d))<AND>e 将匹配所有字符串 abe、bae、cde 和dce。不仅是一个<AND>,而是几个,夹杂着括号。
【问题讨论】:
-
订单(aba vs aca)是否相关?例如
print(match('acaba', '.*aba.*<AND>.*aca.*'))=> 是吗? -
我不认为这是可能的,虽然我不清楚,所以我不会发布答案。无论如何,我认为以您想要的方式解析字符串并将其拆分为 RegExp 不是一个好主意,因为
<AND>是一个完全有效的 RegExp - 所以您需要确保用户知道他们' 不输入 RegExp 并转义您用作分隔符的序列 - 或采用不易出错的路线并允许多个 RegExp 作为输入。 -
@mrxra 不,顺序不重要,re1
re2和re2一样 re1 -
我在
re文档中找不到方法。我发现了一个与 many answers 相关的问题,而不是其他工具(grep、awk、sed 等)。您可以使用 Python 调用 grep/awk/sed。 -
我的问题是你为什么要使用复杂的正则表达式而不是 Python 代码逻辑。较小和简单的正则表达式模式通常比复杂模式具有更好的性能。多个简单的正则表达式模式也将更容易编写和维护。除非单个正则表达式有明显的好处,否则我不会让它复杂化。