【问题标题】:Remove everything after second colon删除第二个冒号后的所有内容
【发布时间】:2018-08-04 16:54:07
【问题描述】:

我需要删除橙色后冒号后的所有内容

例子:

apple:orange:banana:grapes:

变成:

apple:orange

我已经为此查找了一百万个不同的参考资料,但找不到解决方案。

目前在 Notepad++ 中使用查找/替换功能执行此操作。

【问题讨论】:

    标签: regex text notepad++


    【解决方案1】:

    找到什么(^[a-z]+:[a-z]+).*$

    • (^[a-z]+:[a-z]+) 第一个捕获组。匹配字符串开头的字母字符、冒号、字母字符。
    • .*$ 匹配字符串末尾的任何内容。

    替换为\1

    • \1 替换为捕获的第一组。

    您当然可以使表达式更通用:

    找到什么(^[^:]+:[^:]+).*$

    • (^[^:]+:[^:]+) 采集组。匹配字符串开头的冒号以外的任何内容、冒号、冒号以外的任何内容。
    • .*$ 匹配直到字符串结尾的任何内容。

    替换为\1

    • \1 替换为捕获的第一组。

    正如 revo 在下面的评论中指出的那样,在 Notepad++ 中使用上述模式时,您应该禁用 matches newline 选项。

    【讨论】:

    • ^([^\r\n:]*:[^\r\n:]*).* 用作正则表达式就足够了。
    • 确实,不需要第二个捕获组。我会编辑的,干杯。
    • 也不需要$ 锚和+ 量词。另外考虑换行符应该是一种解决方法,否则它可能会超出需要。
    • 不需要确定,但这可能是个好习惯。不过,关于换行的好点。
    • 抱歉,但这可能不是一个好习惯,因为 OP 在第一个冒号前后可能什么都没有,并且执行 .* 会使美元符号无用。
    【解决方案2】:

    如果我理解正确,您可以使用插件ConyEdit 来执行此操作。你可以使用它的命令cc.dac <nth>/<regex>/[<mode>] [-options]cc.dac 表示:删除列后。

    例如:
    在后台运行 ConyEdit,复制下面的文本和命令行,然后粘贴:

     apple:orange:banana:grapes:
     cc.dac 2/:/ -d
    

    【讨论】:

      【解决方案3】:

      文件有多大?

      如果它是一个小文件,你可能会编写一个简单的代码,比如在 java 中遵循 sn-p。大多数编程语言都支持这样的操作。

      String input = "apple:orange:banana:grapes:";
      String[] arrOfStr = input.split(":");
      int index = arrOfStr.indexOf("orange");
      String[] arrOfStrSub = Arrays.copyOf(arrOfStr, 0, index);
      String output = StringUtils.join(arrOfStrSub, ':');
      

      【讨论】:

      • 这没有回答他们想要notepad++的解决方案的问题。
      猜你喜欢
      • 2016-11-08
      • 2012-10-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2022-07-21
      • 2021-12-27
      相关资源
      最近更新 更多