【问题标题】:How to remove duplicate strings in Notepad++/EditPad?如何删除 Notepad++/EditPad 中的重复字符串?
【发布时间】:2016-12-29 05:37:49
【问题描述】:

我环顾四周,只找到了这个:\b(\w+)\b([\w\W]*)\b\1\b,替换为:$1$2

但是,它只能通过删除单词来工作,例如:

word1, word2, word1, word2, word3
*you get:*
word1, word2, word3

我想要的是,如果你有:

"i love you","i love you too", "i love you", "i love you so much"

我应该得到:

"i love you","i love you too", "i love you so much"

【问题讨论】:

  • 也许是这个? (("[^,"]+"(\s*,\s*)?).*)\2 然后替换为 $1
  • 衔尾蛇...你拯救了我的一天!!!!

标签: regex notepad++ editpad


【解决方案1】:

您有一个匹配整个单词的正则表达式,然后是任何 0+ 字符,直到第 1 组中捕获的整个单词的最后一次出现。

您现在需要一个正则表达式,其中单词边界应替换为"\w 模式必须替换为[^"](而不是")。此外,还可以匹配可选的逗号和空格。

查找内容("(?!\s*,\s*")[^"]+")(.*)\1,?\s*
替换为$1$2
. 匹配换行符 选项必须是开启如果你的骗子可能出现在多行。

(?!\s*,\s*") 否定前瞻将使所有 ", " 类似匹配失败,以免删除字段分隔符。

您需要多次点击全部替换来删除所有的欺骗。

查看删除"he loves you","i love you", 的示例屏幕。

【讨论】:

  • 谢谢。我注意到,当我多次单击“全部替换”时,它会删除所有字符串,直到文本中的第一个字符串。这意味着第一个字符串是唯一保留的字符串,例如如果我有:“我爱你”、“我爱你们所有人”、“我爱你”、“我也爱你”……唯一剩下的就是“我爱你”
  • 有一个问题需要澄清:双引号内是否有 words 并且这些引号是否成对出现?您实际上可能需要单词边界,如("\b[^"]+\b")(.*)\1,?\s*
  • 或者,还有其他两种方法:1) 如果"" 中没有逗号,则将逗号添加到否定字符类 - ("[^,"]+")(.*)\1,?\s*。 2)如果"后面跟," - ("(?!\s*,\s*")[^"]+")(.*)\1,?\s*,请确保你不匹配
  • 我在使用 EditPad 时发现我不小心点击了 line 选项,请看图片...这可能是造成这种情况的原因吗?
  • 不,问题是当前的正则表达式匹配", "。我建议使用("(?!\s*,\s*")[^"]+")(.*)\1,?\s* 来避免这种匹配。 Ouroborus 使用 [^,"] 的方法有 1 个错误:它不会匹配带逗号的引用子字符串,我的否定前瞻方法也允许匹配那些。
猜你喜欢
  • 1970-01-01
  • 2018-03-31
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2015-06-07
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多