正则表达式必须包含任何顺序的特定字母

Sam*_*son 7 regex vb.net

我一直在尝试验证VB.net中的字符串,该字符串必须包含这三个字母,而不是特定顺序,并且不需要彼此相邻.ABC

我可以使用LINQ轻松完成此操作

MessageBox.Show(("ABC").All(Function(n) ("AAAABBBBBCCCC").Contains(n)).ToString)
Run Code Online (Sandbox Code Playgroud)

然而,在搜索谷歌和SO超过一个星期后,我完全被难倒了.我最接近的模式是".*[A|B|C]+.*[A|B|C]+.*[A|B|C]+.*"如何AAA回归真实.我知道我可以在尝试一周之后使用其他方法做到这一点我真的想知道它是否可能使用一个正则表达式.

Jer*_*rry 6

你可以利用积极的前瞻:

^(?=.*A)(?=.*B)(?=.*C).+
Run Code Online (Sandbox Code Playgroud)

(?=.*A) 确保字符串中有一个A,并且相同的逻辑适用于其他前瞻.


p.s*_*w.g 6

你原来的模式将无法工作,因为它会匹配任何数目的字符,后面跟着一个或多个A,B,C,或者|字符,后跟任意数量的字符,后面跟着一个或多个A,B,C,或|字符,然后任意数量的字符,接着是一个或多个A,B,C,或|字符,后面跟任何数量的字符.

我可能会使用您已编写的代码,但如果您真的想使用正则表达式,则可以使用一系列前瞻断言,如下所示:

(?=.*A)(?=.*B)(?=.*C)
Run Code Online (Sandbox Code Playgroud)

这将匹配任何包含字符串A,B以及C以任何顺序.

  • 您应该提到先行是零宽度匹配,并且后面应该跟一个要匹配的模式(例如先行后面的`.+`):`(?=.*A)(?=.*B)(?= .*C).+` (2认同)