Regex 如何创建双向和正则表达式?
问题陈述:我需要创建一个正则表达式来双向匹配文本。我所说的双向的意思是,我希望正则表达式以任何顺序匹配少数关键字的出现,即,如果我说a双向和B,那么它将作为Regex 如何创建双向和正则表达式?,regex,pcre,regex-lookarounds,regex-greedy,Regex,Pcre,Regex Lookarounds,Regex Greedy,问题陈述:我需要创建一个正则表达式来双向匹配文本。我所说的双向的意思是,我希望正则表达式以任何顺序匹配少数关键字的出现,即,如果我说a双向和B,那么它将作为a.*B和B.*a。我需要一个正则表达式来这样做 以三个字符串a、b和c为例进行解释,我需要一个匹配的正则表达式:“随机字符串a随机字符串b随机字符串c”、“随机字符串a随机字符串c随机字符串b”、“随机字符串b随机字符串a随机字符串c”、“随机字符串b随机字符串c随机字符串a”、“随机字符串c随机字符串a随机字符串b”,“随机字符串c随机字
a.*B
和B.*a
。我需要一个正则表达式来这样做
以三个字符串a、b和c为例进行解释,我需要一个匹配的正则表达式:“随机字符串a随机字符串b随机字符串c”、“随机字符串a随机字符串c随机字符串b”、“随机字符串b随机字符串a随机字符串c”、“随机字符串b随机字符串c随机字符串a”、“随机字符串c随机字符串a随机字符串b”,“随机字符串c随机字符串b随机字符串a”
我尝试过的:我想出了以下两个正则表达式来解决这个问题:
(A.*B|B.*A)
((?=.*A)。*(?=.*B)。*)
((?=.*a)。*(?=.*b)。*(?=.*c)。*(?=.*d)。*(?=.*e)。*)
。对于更大的句子,我会得到以下异常
RecursionLimit='\u MatchingRegex.\u info.RecursionLimit'引发了类型为“System.InvalidOperationException”的异常
base{System.SystemException}={“pcre16_fullinfo中的错误,代码:-33”}
我正在使用.NET版本的PCRE进行处理
而且,如果我使用第一种方法,正则表达式将变得很长,很难维护。它可能也有性能问题,因为正则表达式引擎的性能也取决于正则表达式的长度
现在,我想了解您认为最好的方法是什么,以及是否有其他方法实现此正则表达式。请注意,我必须为此编写一个正则表达式,我不能只在较大的文本中搜索子字符串(使用Contains或类似方法)
为了以三个字符串a、b和c为例进行解释,我需要一个匹配的正则表达式:“abc”、“acb”、“bac”、“bca”、“cab”、“cba”
你好,阿维纳什,很抱歉造成混淆。我已经编辑了测试用例。变化是a、b和c之间可以发生任何事情,但是顺序应该无关紧要。然后这个
^(?=.*a)(?=.*b)(?=.*c)。*[abc].[abc].[abc].*$
^(?=.*?a)(?=.*?b)(?=.*?c)[abc]{3}$