Regex 记事本++;正则表达式:删除起始字符串和定义字符串之间相同的行,并删除所述字符串后面的剪辑

Regex 记事本++;正则表达式:删除起始字符串和定义字符串之间相同的行,并删除所述字符串后面的剪辑,regex,notepad++,Regex,Notepad++,我试图删除从开始到行中定义的字符串都相同的行,并剪辑该字符串之后的所有内容 示例行: http://waterfountain.common.com/12443 http://waterfountain.common.com/243 http://waterfountain.common.com/243 http://glass.common.com/clear http://glass.common.com/clear http://1room.common.com/closet/empty

我试图删除从开始到行中定义的字符串都相同的行,并剪辑该字符串之后的所有内容

示例行:

http://waterfountain.common.com/12443
http://waterfountain.common.com/243
http://waterfountain.common.com/243
http://glass.common.com/clear
http://glass.common.com/clear
http://1room.common.com/closet/empty
在这种情况下,我想比较从linestart到“common.com”的所有内容,删除所有重复内容,并在“common.com”或“/”之后额外剪辑所有内容

所需的最终结果如下:(末尾有或没有“/”)

我找到了部分解决方案,但我不知道如何根据我的需要修改/组合它们

例如,删除完全相同的行:

^(.*?)$\s+?^(?=.*^\1$)
编辑: 我尝试了“第四只鸟”的解决方案,虽然它确实适用于我提到的案例,但一些测试表明,在某些案例中它失败了。(我忘了提到的案例)

有可能在首字母“/”后出现数字,例如

第三个“/”后面也可能有字母,例如


对于当前的示例数据,可以使用捕获组捕获正斜杠前面的数据,并使用数字作为定义的字符串

然后从该点匹配到字符串末尾,并使用组1的反向引用重复匹配

^(https?://[^/\n]+)/.*(?:\R\1.*)*
解释

  • ^
    字符串的开头
  • (https?://[^/\n]+)
    第1组,在第一次遇到正斜杠之前,使用可选的s捕获http://
  • /.*
    匹配正斜杠后跟除换行符外的任何字符0+次
  • (?:
    非捕获组
    • \R\1.*
      匹配任何unicode换行符序列,返回对组1和字符串其余部分的引用
  • )*
    关闭非捕获组并重复0多次
在替换中使用第一个捕获组
$1

结果

http://waterfountain.common.com
http://glass.common.com

对于当前的示例数据,可以使用捕获组捕获正斜杠前面的数据,并使用数字作为定义的字符串

然后从该点匹配到字符串末尾,并使用组1的反向引用重复匹配

^(https?://[^/\n]+)/.*(?:\R\1.*)*
解释

  • ^
    字符串的开头
  • (https?://[^/\n]+)
    第1组,在第一次遇到正斜杠之前,使用可选的s捕获http://
  • /.*
    匹配正斜杠后跟除换行符外的任何字符0+次
  • (?:
    非捕获组
    • \R\1.*
      匹配任何unicode换行符序列,返回对组1和字符串其余部分的引用
  • )*
    关闭非捕获组并重复0多次
在替换中使用第一个捕获组
$1

结果

http://waterfountain.common.com
http://glass.common.com

我希望你在找。我希望你在找。谢谢。在一些测试之后,我注意到这并没有捕捉到一些我没有指定的情况。可能在//之后出现一个数字,例如。也有可能在第三个/之后有字母,例如@Winter为什么不将它们添加到您的问题中?您是对的,这使问题更加清楚。我编辑了最初的问题。@Winter行是否总是以
http://
开头?在这种情况下,您可以使用
^(https?://[^/\n]+)/.*(:\R\1.*)
它是http://或https://。我刚刚尝试了你的解决方案,它很有效。谢谢,谢谢。在一些测试之后,我注意到这并没有捕捉到一些我没有指定的情况。可能在//之后出现一个数字,例如。也有可能在第三个/之后有字母,例如@Winter为什么不将它们添加到您的问题中?您是对的,这使问题更加清楚。我编辑了最初的问题。@Winter行是否总是以
http://
开头?在这种情况下,您可以使用
^(https?://[^/\n]+)/.*(:\R\1.*)
它是http://或https://。我刚刚尝试了你的解决方案,它很有效。非常感谢。
http://waterfountain.common.com
http://glass.common.com