模式應該匹配字母和字母。在字符串結尾有不同規則的正則表達式模式?
詞seprated與[ ]+
但最後一個字不應該有後[ ]
。
單詞數量沒有限制。
我已經成功地做到:(http://regexr.com?32s1h)
^([A-Z]{1}[a-z]+([a-z]+)?[ ]+)+$
這是Xav Tvc Dcc_
//工作注意到最後的空間
而不是Xav Tvc Dcc
如何解決我的正則表達式?
模式應該匹配字母和字母。在字符串結尾有不同規則的正則表達式模式?
詞seprated與[ ]+
但最後一個字不應該有後[ ]
。
單詞數量沒有限制。
我已經成功地做到:(http://regexr.com?32s1h)
^([A-Z]{1}[a-z]+([a-z]+)?[ ]+)+$
這是Xav Tvc Dcc_
//工作注意到最後的空間
而不是Xav Tvc Dcc
如何解決我的正則表達式?
如果最後一個字後的空間是可選的,使用正則表達式
^(?:[A-Z][a-z]*(?:[ ]+|$))+$
...如果不應該有最後一個字後面的空間,然後用
^(?:[A-Z][a-z]*(?:[ ]+(?=.)|$))+$
需要一個字末後面沒有空間:
^([A-Z]{1}[a-z]+([a-z]+)?[ ]+)*[A-Z]{1}[a-z]+([a-z]+)?$
快速PowerShell的測試:
PS Home:> 'Xav Tvc Dcc ','Xav Tvc Dcc' -match '^([A-Z]{1}[a-z]+([a-z]+)?[ ]+)*[A-Z]{1}[a-z]+([a-z]+)?$'|%{"<$_>"}
<Xav Tvc Dcc>
如果你擔心通過改變正則表達式,你可能引入的錯誤可以隨時構建它:
var word = "([A-Z]{1}[a-z]+([a-z]+)";
var regex = string.Format("^({0}?[ ]+){0}$", word);
或任何您使用的語言的類似。
爲什麼你使用'?:'(未捕捉的組)在這裏很重要? –
@RoyiNamir - 優化資源,因爲我們不需要系統來記住這樣的組 –