2015-03-25 57 views
1

我想要删除一行中的重复单词。使用正则表达式删除一行中的重复单词

例如:

arraythis1, XdashedSmall, Small, Medium, Large, XdashedLarge, XdashedSmall, Small, Medium, Large, XdashedLarge 

我要删除所有重复的项目,把行成这样:

arraythis1, XdashedSmall, Small, Medium, Large 

我的正则表达式是这样的:\w(\D+)(?:,\s+\1\b,)+/gm,见regex101

+0

什么是你的实际输入和预期的输出? – 2015-03-25 05:30:27

+0

但是在您的输出中有小字符重复....:/ – 2015-03-27 05:18:05

回答

1
(\b[^,]+),(?=.*\b\1\b) 

尝试this.Replace。

https://regex101.com/r/sJ9gM7/6

+0

您可能想要使用'(\ b [^ \ n,] +),(?=。* \ b \ 1 \ b)',以避免将新行添加到要删除的重复项目。 – timgws 2015-03-25 05:58:51

0

我不知道您的具体投入,但鉴于这个例子中,如果你只是想删除第一个“arraythis1”,你可以使用正则表达式:

^[^\,]* 
  • 第一胡萝卜(“^”)表示“从行头开始”。
  • 方括号(“[]”)表示匹配列表中不存在的单个字符(位于方括号中)。
  • 我通过使用列表前面的另一个胡萝卜来反转方括号(而不是匹配单个字符,不匹配单个字符)。
  • 最后,我使用星号(“*”)来确保我获得所有不是的逗号,确保我捕获所有这些字符。

然后,最后,要做出最后一个正则表达式,您需要删除剩余空间(或空格)。

^[^\,]*,\s+ 

empty string。看到演示https://regex101.com/r/oV2aO0/2

+0

不删除'arraythis1,'查看我的输出,那会是结果 – j2query 2015-03-25 05:40:51

+0

@ j2query您使用的是什么语言?这是你不应该使用正则表达式的东西。 – timgws 2015-03-25 05:48:48

+0

即时通讯使用jquery – j2query 2015-03-25 05:50:43

0

我想你应该试试这个

var words = new HashSet<string>(); 
string text = "arraythis1, XdashedSmall, Small, Medium, Large, XdashedLarge, XdashedSmall, Small, Medium, Large, XdashedLarge"; 
text = Regex.Replace(text, "\\w+", m => 
       words.Add(m.Value.ToUpperInvariant()) 
        ? m.Value 
        : String.Empty); 
相关问题