查找大写第一个字母的单词,这些单词组合在一起
我正在尝试在字符串中找到单个或组合在一起的单词。
例如:
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();
结果: This
, String That
, Here Is More
, Text
定义第二个模式并重复零或更多..
@"\b[AZ][az]*(?:\s[AZ][az]*)*\b"
DEMO