[英]Regex first letter of each word Upper Case separated by spaces and 3 to 29 character long…C#
我最近被分配了一項不可能完成的任務(據我估計)來創建一個正則表達式模式,在該模式中我應該能夠使用以下准則驗證同一個句子或文本框中的幾個單詞:
示例: Joseph Gordon Levitt
這個例子正好是 20 個字符長,每個名字(或單詞)長度超過 3 個字符,用空格分隔,每個名字(或單詞)的第一個字母是大寫的。
我試過這個正則表達式模式^[AZ]{1}[a-zA-Z\\s]{3,20}$
。 它適用於某些字符串,但不是全部。
讓我們來看看要求:
\\p{Lu}
\\s+
(1 個或多個空格)/ \\s
(僅單個空格)\\p{Lu}\\p{L}{2,}
- 以大寫開頭,然后有 2 個或更多字母^
/ \\A
(字符串開頭)之后使用積極的前瞻: (?!.{21})
或(?=.{0,20}$)
。生成的正則表達式看起來像
^(?!.{21})\p{Lu}\p{L}{2,}(?:\s\p{Lu}\p{L}{2,})*$
^(?=.{0,20}$)\p{Lu}\p{L}{2,}(?:\s\p{Lu}\p{L}{2,})*$
或者,如果單詞之間可以有 1+ 個空格
^(?!.{21})\p{Lu}\p{L}{2,}(?:\s+\p{Lu}\p{L}{2,})*$
^(?=.{0,20}$)\p{Lu}\p{L}{2,}(?:\s+\p{Lu}\p{L}{2,})*$
注意:如果您曾經針對可以以\\n
、換行符結尾的字符串對其進行測試,請將$
替換$
\\z
。
請參閱正則表達式演示。
細節
^
- 字符串的開始(?=.{0,20}$)
- 字符串中必須有 0 到 20 個非換行符直到結尾\\p{Lu}
- 大寫字母\\p{L}{2,}
- 兩個或更多字母(?:\\s\\p{Lu}\\p{L}{2,})*
- 0 次或多次重復:
\\s
- 一個空格(如果使用\\s+
則為 1+ 個空格)\\p{Lu}\\p{L}{2,}
- 一個大寫字母,然后是任意兩個或多個字母$
- 字符串的結尾( \\z
是字符串的結尾)。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.