我只是想知道是否可以使用一个正则表达式来匹配另一个正则表达式,这是某种:
['a-z'].match(['b-x'])
True
['m-n'].match(['0-9'])
False
这种事情完全可以用正则表达式吗?我在 python 中工作,所以任何针对 re
模块实现的具体建议都会有所帮助,但我会采取任何我能得到的关于正则表达式的建议。
编辑:好的,一些澄清显然是必要的!我绝对知道正常的匹配语法看起来像这样:
expr = re.compile(r'[a-z]*')
string = "some words"
expr.match(string)
<sRE object blah blah>
但我想知道正则表达式是否能够匹配我上面试图解释的非语法正确版本中其他不太具体的表达式,来自 b-x 的任何字母始终是任何字母的子集(匹配)从 a-z。我只是通过尝试知道这不是您可以通过调用一个已编译表达式对另一个已编译表达式的匹配来完成的事情,但问题仍然存在:这是否可能?
如果仍然不清楚,请告诉我。
最佳答案
我认为 - 在理论上 - 判断正则表达式 A
是否匹配正则表达式 B
匹配的子集,算法可以:
- 计算
B
和“联合”A|B
的最小确定性有限自动机。 - 检查两个 DFA 是否相同。当且仅当 A 匹配 B 匹配的子集时,这是真的。
但是,在实践中执行此操作可能是一个重大项目。有Constructing a minimum-state DFA from a Regular Expression之类的解释但他们只倾向于考虑数学上纯正则表达式。您还必须处理 Python 为方便起见而添加的扩展。此外,如果任何扩展导致语言不规则(我不确定是否是这种情况),您可能无法处理这些扩展。
但是你想做什么?也许有更简单的方法...?
关于python - 如何判断一个正则表达式是否匹配另一个正则表达式的子集?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6363397/