[英]Find words with capital first letter, that are grouped together
我正在嘗試在字符串中找到單個或組合在一起的單詞。
例如:
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個單詞,用大寫字母 ?
一個真正的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字母,請使用原子組(?>\\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
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.