我想使用正则表达式将所有单词与多于一个字符匹配,而不是完全由相同字符组成的单词。
这不应该匹配:ttttt,rrrrr,ggggggggggggg
这应该匹配:rttttttt,word,wwwwwwwwwu
答案 0 :(得分:6)
以下表达式可以解决问题。
^(?<FIRST>[a-zA-Z])[a-zA-Z]*?(?!\k<FIRST>)[a-zA-Z]+$
FIRST
FIRST
不同注意,足以查找与第一个字符不同的字符,因为如果没有字符与第一个字符不同,则所有字符都相等。
您可以将表达式缩短为以下内容。
^(\w)\w*?(?!\1)\w+$
这将匹配[a-zA-Z]以外的其他一些字符。
答案 1 :(得分:1)
我会将所有唯一的单词添加到列表中,然后使用此正则表达式
\ B(\ w)的\ 1+ \ B'/ P>
抓住所有一个字符并摆脱它们
答案 2 :(得分:1)
这不使用正则表达式,但我相信它可以满足您的需求:
public bool Match(string str)
{
return string.IsNullOrEmpty(str)
|| str.ToCharArray()
.Skip(1)
.Any( c => !c.Equals(str[0]) );
}
答案 3 :(得分:0)
以下RE将与您要求的相反:匹配单词由同一个字符组成。尽管如此,它可能仍然有用。
\b(\w)\1*\b
答案 4 :(得分:0)
\b\w*?(\w)\1*(?:(?!\1)\w)\w*\b
或
\b(\w)(?!\1*\b)\w*\b
这假设你从一些较大的文字中剔除了这些文字;这就是为什么它需要单词边界和填充。如果你有一个单词列表,并且你只是想验证符合条件的单词,那么可能会有一个更简单的正则表达式:
(.)(?:(?!\1).)
...因为你已经知道每个单词只包含单词字符。另一方面,根据您对“单词”的定义,您可能需要使用更具体的内容替换前两个正则表达式中的\w
,例如[A-Za-z]
。