c# - 具有量化部分和负向前瞻的正则表达式

标签 c# regex regex-negation

我需要检查字符串是否包含以下模式:以“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/

相关文章:

javascript - 正则表达式匹配字符串中的两个或多个名称

python - 从列表中获取子字符串

php - 如何查找字符串句子中含有特殊字符的单词

python-2.7 - 除了字符集之外的 Python 正则表达式匹配

c# - 如何在 VSTO MS 项目中使用多个任务.分配?

c# - 使用 Lync ContactManager 获取所有联系人

javascript - RegExp 的类型

c# - 是否可以从另一个表单触发点击事件?

c# - 如何从 Xamarin Forms View 创建 native UWP View ?

linux - 正则表达式匹配 IP 地址但忽略本地主机