Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/281.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 相互匹配两个正则表达式_Python_Regex - Fatal编程技术网

Python 相互匹配两个正则表达式

Python 相互匹配两个正则表达式,python,regex,Python,Regex,我想比较Python中的两个正则表达式 基本上,我需要测试一个表达式是否包含在另一个表达式中 例如,[AB]D是否包含在[AB][CD]中。或者是……K。。包含在…[KR] 我尝试了以下方法,但无效: re.finditer(r"[AB][DF]",r"[AB]D") re.finditer(r"[AB]D",r"[AB][CD]") 我的表达式可以有不同的大小,但具有相同大小表达式的解决方案将非常好 编辑 我所有的正则表达式都非常简单 它们只包含点、方形挡板和^ 。在real regexp中

我想比较Python中的两个正则表达式

基本上,我需要测试一个表达式是否包含在另一个表达式中

例如,[AB]D是否包含在[AB][CD]中。或者是……K。。包含在…[KR]

我尝试了以下方法,但无效:

re.finditer(r"[AB][DF]",r"[AB]D")
re.finditer(r"[AB]D",r"[AB][CD]")
我的表达式可以有不同的大小,但具有相同大小表达式的解决方案将非常好

编辑

我所有的正则表达式都非常简单

它们只包含点、方形挡板和^

。在real regexp中表示类似*的任何内容 [AB]指A或B [^P]的意思不是P

编辑2


感谢您的回答和评论,我想我将从一个regexp生成所有字符串的集合,并用第二个正则表达式测试它们。

您可以这样做,但您必须自己做。这是一个很大的工作,你可能会认为这是不值得的努力。以下是一种方法:

将正则表达式A和B转换为NFA

设a,b为NFA形式的两个正则表达式的初始状态集

取两个集合的ε闭包,ea,eb

对于每个符号,跟随从ea和eb到该符号的所有转换,以形成新状态a',b'

回到第三步

最终,您将递归这两个正则表达式的所有可能状态集。如果在任何一点上eb包含最终状态,但ea不包含,则B不包含在a中


这保证会终止,因为存在有限数量的状态集。此技术不适用于反向引用。从技术上讲,如果使用反向引用,那么它们就不再是正则表达式,至少从形式语言的角度来看是这样。

你可以这样做,但你必须自己做。这是一个很大的工作,你可能会认为这是不值得的努力。以下是一种方法:

将正则表达式A和B转换为NFA

设a,b为NFA形式的两个正则表达式的初始状态集

取两个集合的ε闭包,ea,eb

对于每个符号,跟随从ea和eb到该符号的所有转换,以形成新状态a',b'

回到第三步

最终,您将递归这两个正则表达式的所有可能状态集。如果在任何一点上eb包含最终状态,但ea不包含,则B不包含在a中


这保证会终止,因为存在有限数量的状态集。此技术不适用于反向引用。从技术上讲,如果使用反向引用,则它们不再是正则表达式,至少从形式语言的角度来看是这样。

您可以发现一个字符串是否在另一个字符串中,if first_字符串是否在second_字符串中。或者,当您说包含在中时,您是指其他内容吗?您是否需要解决与您的表达式类似的一般问题,即[AB]D与[AB][CD]类型的正则表达式或简单表达式?后一个问题会简单得多。建议的重复问题不是很好,但答案是。@Kevin我指的是其他问题:例如,在python regexp语言中,我指的是…K。。包含在…[KR]。。或者[KR]包含在[^P]中。@DSM我想我想解决一般问题,但我所有的正则表达式都非常简单,包含点、方括号和^。点是表示任何内容的常用*点,[AB]表示A或B,[^P]表示非P。您可以找到一个字符串是否在另一个字符串中,如果第一个字符串在第二个字符串中。或者,当您说包含在中时,您是指其他内容吗?您是否需要解决与您的表达式类似的一般问题,即[AB]D与[AB][CD]类型的正则表达式或简单表达式?后一个问题会简单得多。建议的重复问题不是很好,但答案是。@Kevin我指的是其他问题:例如,在python regexp语言中,我指的是…K。。包含在…[KR]。。或者[KR]包含在[^P]中。@DSM我想我想解决一般问题,但我所有的正则表达式都非常简单,包含点、方括号和^。点是表示任何内容的常用*点,[AB]表示A或B,[^P]表示非P.+1这还要求表达式是真正的正则表达式,不使用扩展正则表达式中的任何前瞻或回顾断言。感谢您的回答。对于我想做的事情来说,这太复杂了。在我的例子中,我认为将所有可能的表达式与一个正则表达式进行比较会更容易。正如在我的编辑中所解释的,我的正则表达式非常简单。+1这还要求表达式是真正的正则表达式,不使用扩展正则表达式中可用的任何前瞻或回顾断言。感谢您的回答。对于我想做的事情来说,这太复杂了。在我的例子中,我认为比较一个正则表达式的所有可能表达式 加压会更容易。正如我在编辑中所解释的,我的regexp非常简单。