使用正则表达式

时间:2017-11-27 21:38:05

标签: regex

我有一个看起来像这样的字符串

xyz 123;abc;xyz 123;efg;

我想删除重复项并在字符串中只保留一个匹配项。我希望输出像这样

xyz 123;abc;efg;

我尝试使用(?<=;|^)([^;]*);(\1)+(?=;|$),但无法弄清楚如何删除其中一个重复项。有什么建议 ?

3 个答案:

答案 0 :(得分:0)

由于您没有指定语言,我会假设原始正则表达式中的标记都使用您正在使用的任何语言。

代码

See regex in use here

(([^;]*;).*)\2

替换为\1

说明

  • (([^;]*;).*)将以下内容捕获到捕获组1中
    • ([^;]*;)将以下内容捕获到捕获组2中   - [^;]*任意次数匹配除分号字符;以外的任何字符
      • ;按字面意思匹配分号字符
  • \2匹配与第二个捕获组
  • 最近匹配的文本相同的文本

答案 1 :(得分:0)

感谢大家的建议。最后我使用这个正则表达式

(?<=,|^)([^,]*)(?=.*\\b\\1\\b)(?=,|$)

答案 2 :(得分:0)

以下是针对java的。
对于重复的单词(结果/随机),您可以使用正则表达式字符串作为
\b(\w+)\b(?=.*?\b\1\b

对于字符串中的重复字符(结果/随机),您可以使用
(.)(?=.*?\1)