用于查找和删除重复单词的正则表达式

tri*_*ahn 7 c# regex string

在C#中使用正则表达式,有没有办法在包含各种单词和符号的字符串中查找和删除重复的单词或符号?

防爆.

初始字串:

"我喜欢环境.环境很好."

所需的字符串:

"我喜欢环境.很好"

删除了重复项: "the","environment","."

Per*_*ahl 14

正如其他人所说,你需要的不仅仅是正则表达式来跟踪单词:

var words = new HashSet<string>();
string text = "I like the environment. The environment is good.";
text = Regex.Replace(text, "\\w+", m =>
                     words.Add(m.Value.ToUpperInvariant())
                         ? m.Value
                         : String.Empty);
Run Code Online (Sandbox Code Playgroud)


Jef*_*ood 12

这似乎对我有用

(\b\S+\b)(?=.*\1)
Run Code Online (Sandbox Code Playgroud)

比赛就像这样

apple apple orange  
orange red blue green orange green blue  
pirates ninjas cowboys ninjas pirates  


cha*_*aos 5

好吧,杰夫向我展示了如何使用表达式内反向引用和全局修饰符的魔力来实现这一目标,所以我最初的答案是无效的。你们都应该去投票支持杰夫的答案。然而,对于后人,我会注意到,这其中存在一个棘手的小正则表达式引擎敏感性问题,如果您使用 Perl 风格的正则表达式,则需要执行以下操作:

\b(\S+)\b(?=.*\b\1\b.*)
Run Code Online (Sandbox Code Playgroud)

而不是 Jeff 的答案,因为 C# 的正则表达式将有效地捕获,\b\1PCRE 不会。