如何为两个正则表达式的“交集”编写正则表达式,可用于匹配字符
给定两个正则表达式,我们可以编写一个正则表达式来表示它们在以下两种差异感中的每一个中的“交集”,以便匹配字符串中的任何位置吗?
>鉴于两个正则表达式的expr1和expr2,我们可以写一个正则表达式 例如,expr1是(123 | 12345 | abc | abcde),expr2是 (?= ^ expr1 $)(?= ^ expr2 $).*有锚点^和$,阻止它在字符串中间找到匹配项. >出现在两个正则表达式中的至少一个中,并且 正则表达式可用于匹配字符串中的任何位置? 例如,expr1是(123 | abcde),expr2是(12345 | abc). 在应用正则表达式匹配字符串中间时,第2部分中“交集”的定义比第1部分中的定义更自然: 在上面的例子中,每当12345匹配时,123也会出现,所以12345似乎在expr1和expr2中,并且应该在它们的“交集”中.如果123是匹配,则12345不一定是匹配,例如,在blah123blahabcblah中,因此在“交叉点”中不考虑123.对abcde的类似解释是和abc不在“交集”中. 谢谢! 解决方法
第1部分
我还没有找到解决方案,会再看一下. 回答第2部分 这是一个适用于正则表达式引擎的解决方案,允许在后台进行反向引用,例如.NET和Matthew Barnett用于Python的优秀正则表达式模块. 对于你的例子: (?x) (?=(12345|abc))(?=(123|abcde)) # AND the expressions (?: # take the longest match 1(?<=2.*) #abcde,1 is abc | 2(?<=1.*) #12345,2 is 123 ) 一般来说: (?x) (?=(expr1))(?=(expr2)) # AND the expressions (?: # take the longest match 1(?<=2.*) | 2(?<=1.*) ) 我认为这有效……但也许有一个我没有想过的边缘情况. 这是一些经过测试的Python代码. import regex pattern = r'''(?x) (?=(12345|abc))(?=(123|abcde)) # AND the expressions (?: # take the longest match 1(?<=2.*) #abcde,2 is 123 ) ''' myregex = regex.compile(pattern) print ("--- blah12345blahabcdeblah ---") for match in myregex.finditer("blah12345blahabcdeblah"): print("Overall match: ",match.group(0)) print ("--- blah123blahabcblah ---") for match in myregex.finditer("blah123blahabcblah"): print("Overall match: ",match.group(0)) print ("--- blah12345blahabcdeblah12345 ---") for match in myregex.finditer("blah12345blahabcdeblah12378"): print("Overall match: ",match.group(0)) (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |