【问题标题】:Remove Repeated Text删除重复文本
【发布时间】:2013-08-20 18:52:47
【问题描述】:

有人可以修改此正则表达式以删除示例中的单词吗:

这不适用于下面的额外内容:(<.+?\/>)(?=\1)

<text><text>extra<words><text><words><something>

应该变成:

<text>extra<words><something>

谢谢

【问题讨论】:

  • 你的逻辑是什么?您想删除除每个&lt;tag&gt; 的第一次出现之外的所有内容吗?而且,非常重要的是,您想在哪种语言中使用此模式?
  • 我会使用正则表达式来匹配一个模式(正则表达式的目的),然后如果数组不包含匹配项,则将其添加到数组中。然后我会为输出内爆数组。可能还有其他方法,但我认为对于任何方法,正则表达式都是解决方案的组成部分,而不是解决方案。

标签: regex


【解决方案1】:

这是我使用lookbehinds和back references想出的:

(<[^>]+>)(?<=\1.*\1)

这将匹配&lt;tag&gt; 的任何实例,该实例前面至少有一个相同&lt;tag&gt; 的其他实例。

例如,在 C# 中使用它:

var input = "<text><text>extra<words><text><words><something>";
var output Regex.Replace(input, @"(<[^>]+>)(?<=\1.*\1)", "");
Console.WriteLine(output); // <text>extra<words><something>

但是,这不适用于许多正则表达式。例如,JavaScript 不支持lookbehinds。

【讨论】:

    猜你喜欢
    • 2016-11-02
    • 2014-05-07
    • 2010-11-17
    • 2020-12-10
    • 2013-03-27
    • 1970-01-01
    • 2017-06-30
    • 2020-01-19
    • 2018-06-05
    相关资源
    最近更新 更多