C# 正则表达式来检测单词是否是字符串的一部分,并且下一个单词是否未大写

C# 正则表达式来检测单词是否是字符串的一部分,并且下一个单词是否未大写,c#,regex,C#,Regex,我正在寻找一个正则表达式,它将匹配一个或多个特定单词,这些单词是给定字符串的一部分,并带有一个限制-如果在模式后有一个单词,那么这个单词不应该大写。 让我们假设这些词是“基本格”,下面是一些例子 最终基本情况-应匹配 最终基本财务案例-应匹配 最终基本案例财务-不应匹配(下一个单词“财务”大写) 最终基本案例-不应匹配(“案例”和“案例”不匹配) 我使用下面的正则表达式来确定我的单词是否是字符串的一部分 \bBase Case(?!\w) 有人能帮我修改我的正则表达式以增加对下一个大写单词

我正在寻找一个正则表达式,它将匹配一个或多个特定单词,这些单词是给定字符串的一部分,并带有一个限制-如果在模式后有一个单词,那么这个单词不应该大写。 让我们假设这些词是“基本格”,下面是一些例子

  • 最终基本情况
    -应匹配
  • 最终基本财务案例
    -应匹配
  • 最终基本案例财务
    -不应匹配(下一个单词“财务”大写)
  • 最终基本案例
    -不应匹配(“案例”和“案例”不匹配)
我使用下面的正则表达式来确定我的单词是否是字符串的一部分

\bBase Case(?!\w)

有人能帮我修改我的正则表达式以增加对下一个大写单词的限制吗?

您需要在搜索模式后检查两种情况:

  • 字符串结尾(
    $
    );或
  • 另一个单词,不以大写字母开头(
    \s+[^a-Z\s]
  • 您可以使用此正则表达式执行此操作:

    \bBase Case(?=$|\s+[^A-Z\s])
    
    请注意,由于前瞻的后半部分在下一个单词之前声明了一个空格,因此它会阻止
    基本情况或类似情况的匹配


    在最常见的情况下,您可以使用

    \bBase\s+Case\b(?!\W*\p{Lu})
    

    详细信息

    • \b
      -单词边界
    • Base\s+Case
      -
      Base
      ,1+空格,
      Case
    • \b
      -单词边界
    • (?!\W*\p{Lu})
      -如果有0个或多个非单词字符紧跟在当前位置右侧的任何Unicode大写字母后面,则会导致匹配失败的负前瞻
    如果单词和大写字母之间只有空格,请将
    \W
    替换为
    \s

    C#使用:


    试试
    \bBase Case\b(?![A-Z])
    \bBase Case\b[^A-Z]
    @CarySwoveland抓得好!我没有想到
    '
    匹配
    \s+[^A-Z]
    。我已经更正了regex
    “基本情况”。
    不匹配,但我不知道是否应该匹配。@CarySwoveland同意,但不清楚。这个问题没有标点符号的证据。
    var results = Regex.Matches(text, @"\bBase\s+Case\b(?!\W*\p{Lu})")
        .Cast<Match>()
        .Select(m => m.Value)
        .ToList();
    
    var texts = new List<string> {"Final Base Case", "Final Base Case financial", "Final Base Case Financial", "Final Base Cases"};
    foreach (var text in texts) {
        Console.WriteLine("{0}: {1}", text, Regex.IsMatch(text, @"\bBase\s+Case\b(?!\W*\p{Lu})"));
    }
    
    Final Base Case: True
    Final Base Case financial: True
    Final Base Case Financial: False
    Final Base Cases: False