【发布时间】:2018-08-04 16:54:07
【问题描述】:
我需要删除橙色后冒号后的所有内容
例子:
apple:orange:banana:grapes:
变成:
apple:orange
我已经为此查找了一百万个不同的参考资料,但找不到解决方案。
目前在 Notepad++ 中使用查找/替换功能执行此操作。
【问题讨论】:
我需要删除橙色后冒号后的所有内容
例子:
apple:orange:banana:grapes:
变成:
apple:orange
我已经为此查找了一百万个不同的参考资料,但找不到解决方案。
目前在 Notepad++ 中使用查找/替换功能执行此操作。
【问题讨论】:
找到什么:(^[a-z]+:[a-z]+).*$
(^[a-z]+:[a-z]+) 第一个捕获组。匹配字符串开头的字母字符、冒号、字母字符。.*$ 匹配字符串末尾的任何内容。替换为:\1
\1 替换为捕获的第一组。您当然可以使表达式更通用:
找到什么:(^[^:]+:[^:]+).*$
(^[^:]+:[^:]+) 采集组。匹配字符串开头的冒号以外的任何内容、冒号、冒号以外的任何内容。.*$ 匹配直到字符串结尾的任何内容。替换为:\1
\1 替换为捕获的第一组。正如 revo 在下面的评论中指出的那样,在 Notepad++ 中使用上述模式时,您应该禁用 matches newline 选项。
【讨论】:
^([^\r\n:]*:[^\r\n:]*).* 用作正则表达式就足够了。
$ 锚和+ 量词。另外考虑换行符应该是一种解决方法,否则它可能会超出需要。
.* 会使美元符号无用。
如果我理解正确,您可以使用插件ConyEdit 来执行此操作。你可以使用它的命令cc.dac <nth>/<regex>/[<mode>] [-options]。 cc.dac 表示:删除列后。
例如:
在后台运行 ConyEdit,复制下面的文本和命令行,然后粘贴:
apple:orange:banana:grapes:
cc.dac 2/:/ -d
【讨论】:
文件有多大?
如果它是一个小文件,你可能会编写一个简单的代码,比如在 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, ':');
【讨论】: