2012-11-19 68 views

回答

1

如果最後一個字後的空間是可選的,使用正則表達式

^(?:[A-Z][a-z]*(?:[ ]+|$))+$ 

...如果不應該有最後一個字後面的空間,然後用

^(?:[A-Z][a-z]*(?:[ ]+(?=.)|$))+$ 
+0

爲什麼你使用'?:'(未捕捉的組)在這裏很重要? –

+0

@RoyiNamir - 優化資源,因爲我們不需要系統來記住這樣的組 –

1

需要一個字末後面沒有空間

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

或任何您使用的語言的類似。

+0

我想過那個解決方案,但我並不想複製這個模式....(談論第一個答案) –

+0

因爲不知道現在的原因,第二個無法正常工作,所以我刪除了它。 – Joey

+0

您可以始終使用子模式構造完整模式,以避免更改錯誤或代碼重複。 – Joey

0

爲什麼去不會做這樣的事情:

^([A-Z]{1}[a-z]+\s?)* 

顯示Here

然後運行修剪操作來刪除尾隨空格?

相關問題