簡體   English   中英

查找包含大寫第一個字母的單詞

[英]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();

結果: ThisString ThatHere Is MoreText

定義第二個模式並重復零或更多..

@"\b[A-Z][a-z]*(?:\s[A-Z][a-z]*)*\b"

DEMO

使用組上的+來匹配多個匹配項。

(\b[A-Z][a-z]*\s\b)+

演示

使用{1,3}匹配一組,兩組或三組中的單詞。

(\b[A-Z][a-z]*\s\b){1,3}

演示

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM