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