查找首字母大写的单词,这些单词组合在一起
本文关键字:单词 组合 在一起 查找 | 更新日期: 2023-09-27 18:24:12
我试图在单个或组合在一起的字符串中查找单词。
例如:
This is a String That is my example, Here Is More text as example.
我想退出,所以我的结果如下。
This
String That
Here Is More
到目前为止,我的正则表达式是这个
('b[A-Z][a-z]*'s'b)
这会发现大写的单词,但只会将包含空格的单词单独分组。如何控制正则表达式以连续接受1到3个大写字母的单词?
'b(?>'p{Lu}'p{M}*)(?>'p{L}'p{M}*)*(?:'s+(?>'p{Lu}'p{M}*)(?>'p{L}'p{M}*)*){0,2}'b
它只匹配一行中1-3个大写单词,没有前导/尾随空格。
参见regex演示
以下是解释:
'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字母,请使用原子组(?>'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<Match>().Select(x => x.Value).ToList();
结果:This
、String That
、Here Is More
、Text
在组中使用+
匹配多个匹配项。
('b[A-Z][a-z]*'s'b)+
演示
使用{1,3}
匹配一组、两组或三组中的单词。
('b[A-Z][a-z]*'s'b){1,3}
演示
定义第二个模式并重复零个或更多。。
@"'b[A-Z][a-z]*(?:'s[A-Z][a-z]*)*'b"
演示