查找大写第一个字母的单词,这些单词组合在一起

我正在尝试在字符串中找到单个或组合在一起的单词。

例如:

This is a String That is my example, Here Is More text as example. 

我想拿出来,所以我的结果如下。

 This String That Here Is More 

到目前为止我的正则表达式是这样的

 (\b[AZ][az]*\s\b) 

这会找到大写单词,但只将它们分开包含空格。 如何控制正则表达式连续接受1到3个单词,用大写字母

使用组上的+来匹配多个匹配项。

 (\b[AZ][az]*\s\b)+ 

演示

使用{1,3}匹配一组,两组或三组中的单词。

 (\b[AZ][az]*\s\b){1,3} 

演示

一个真正的Unicode支持解决方案是

 \b(?>\p{Lu}\p{M}*)(?>\p{L}\p{M}*)*(?:\s+(?>\p{Lu}\p{M}*)(?>\p{L}\p{M}*)*){0,2}\b 

它只会连续匹配1-3个大写单词而没有前导/尾随空格。

请参阅正则表达式演示

这是解释:

  • \b – 单词边界(之前应该有一个非单词字符)
  • (?>\p{Lu}\p{M}*)(?>\p{L}\p{M}*)* – 以大写字母开头的单词(后跟可选的变音符号),然后是任意(也是预编译的)Unicode字母
  • (?:\s+(?>\p{Lu}\p{M}*)(?>\p{L}\p{M}*)*){0,2} – 2到0次出现
    • \s+ – 一个或多个空格( \s+ )后跟…
    • (?>\p{Lu}\p{M}*)(?>\p{L}\p{M}*)* – 由Unicode字母组成的单词(可能带有变音符号)。

\p{Lu}匹配大写的Unicode字母。 \p{M}匹配变音符号。 因此,要匹配大写的Unicode字母,请使用primefaces组(?>\p{Lu}\p{M}*)\p{L}匹配任何基本的Unicode字母。 因此,一个单词将是子模式的总和(?>\p{Lu}\p{M}*)(?>\p{L}\p{M}*)*

C#代码 :

 var line = "This is a String That is my example, Here Is More Text as example."; var pattern = @"\b(?>\p{Lu}\p{M}*)(?>\p{L}\p{M}*)*(?:\s+(?>\p{Lu}\p{M}*)(?>\p{L}\p{M}*)*){0,2}\b"; var result = Regex.Matches(line, pattern).Cast().Select(x => x.Value).ToList(); 

结果: ThisString ThatHere Is MoreText

定义第二个模式并重复零或更多..

 @"\b[AZ][az]*(?:\s[AZ][az]*)*\b" 

DEMO