我想用一個正則表達式來匹配所有具有更多一個字符的單詞,而不是完全由相同字符組成的單詞。如何將單詞與多個字符相匹配?
這不應該匹配:TTTTT,RRRRR,ggggggggggggg
這應該匹配:rttttttt,文字,wwwwwwwwwu
我想用一個正則表達式來匹配所有具有更多一個字符的單詞,而不是完全由相同字符組成的單詞。如何將單詞與多個字符相匹配?
這不應該匹配:TTTTT,RRRRR,ggggggggggggg
這應該匹配:rttttttt,文字,wwwwwwwwwu
下面的表達式可以解決這個問題。
^(?<FIRST>[a-zA-Z])[a-zA-Z]*?(?!\k<FIRST>)[a-zA-Z]+$
FIRST
FIRST
該下一個字符是不同的使用負前向斷言請注意,這足以查找與第一個字符不同的字符,因爲如果沒有字符與第一個字符不同,則所有字符都相同。
您可以縮短以下表達式。
^(\w)\w*?(?!\1)\w+$
這將匹配除[a-zA-Z]以外的其他字符。
以下RE會做什麼你問的相反:比賽,其中一個字由相同的字符組成。儘管如此,它可能仍然有用。
\b(\w)\1*\b
我想補充的所有獨特單詞的列表,然後使用這個表達式
\ B(\ W)\ 1+ \ b
抓住所有一個字符單詞並擺脫他們
這不使用正則表達式,但我相信它會做你所要求的:
public bool Match(string str)
{
return string.IsNullOrEmpty(str)
|| str.ToCharArray()
.Skip(1)
.Any(c => !c.Equals(str[0]));
}
\b\w*?(\w)\1*(?:(?!\1)\w)\w*\b
或
\b(\w)(?!\1*\b)\w*\b
這是假設你拔的話了一些較大的文本的;這就是爲什麼它需要字邊界和填充。如果你有一個單詞列表和你只是想驗證符合標準的,更簡單的正則表達式可能會做:
(.)(?:(?!\1).)
...因爲你已經知道每個字只包含單詞字符。另一方面,根據您對「單詞」的定義,您可能需要將前兩個正則表達式中的\w
替換爲更具體的內容,如[A-Za-z]
。
很好的解釋 – 2009-05-05 16:03:54