我需要检查字符串是否包含以下模式:以“A”开头,后跟零个或多个空格,然后是除“B”以外的任何内容。
因此,以下内容必须匹配:"A"
。 “AX”
、“A X”
、“A”
、“A XB”
以下字符串不得匹配:"AB"
、"A B"
我天真的尝试是A\s*(?!B)
,但它与不需要的“A B”
匹配。
最佳答案
如果你只需要判断 true 或 false,你可以将 \s*
放入前瞻中:
Regex.IsMatch(s, @"A(?!\s*B)")
它发现 A
没有 0+ 空格,后面跟着 B
。
请参阅regex demo .
在您的模式中,A\s*(?!B)
,可以在任何 0+ 空格之后执行负向前瞻,并且一旦空格后面没有 B
被发现,则返回有效匹配(这是由于 \s*
量化模式可能导致的回溯而发生的)。
如果您需要实际匹配 A
及其后面的空格,但如果这些空格后面没有 B
,请使用我评论中的模式。
(?>A\s*)(?!B)
此模式匹配:
(?>A\s*)
- 一个原子组,匹配A
,然后是 0+ 空格,不回溯到组模式 允许(?!B)
- 空格后没有B
,否则整个匹配失败。
关于c# - 具有量化部分和负向前瞻的正则表达式,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/45463437/