如何在Notepad++中删除冒号(:)之前的所有内容?

3

我有一个类似于notepad++的文件如下:

n1:n1:n1
n1:n1:n2
n1:n1:n3

我想删除冒号之前的所有内容,包括冒号本身,希望得到以下格式的结果:

n1:n1
n1:n2
n1:n3

谢谢, 希望我的问题解释得足够清楚。

Ken White : 谢谢,但是我的文件有超过10k行,第一个“n1”在大约1000行后变成“n2”,然后变成“o1”而不是“n1”,我想删除冒号之前的所有内容。


你知道在Notepad++中可以按列选择吗? - VirtualTroll
http://notepad-plus-plus.org/features/column-mode-editing.html - VirtualTroll
1个回答

2
使用Replace和正则表达式查找行首不是冒号:的任何字符,后跟一个冒号,并将它们替换为无内容。
  • 查找内容:^([^:]+:)(.)
  • 替换为:\2
  • 搜索模式:正则表达式

这实际上回答了您的问题,并且不会假设第一个冒号之前或之后的任何内容。

  1. 第一个^表示搜索必须从行首开始
  2. 括号是分组器和保存器。对于这个第一部分,它实际上不是必需的,因为您只是删除冒号之前的内容,但这使其与Ken White的解决方案相平行
  3. 方括号[ ]指示要查找的字符 a. 第二个^紧随第一个方括号之后,从要查找的字符转换为不要查找的字符 b. 因此,[^:]表示查找除冒号以外的任何字符
  4. 加号+表示查找这组字符的1个或多个出现次数 a. 如果某些行可能以冒号开头,并且您仍然希望替换该冒号,则需要查找行首的0或多个非冒号字符 b. 为此,请将+替换为*
  5. 选择冒号(因此它也将被删除)
  6. 右括号结束第一组
  7. 左括号开始第二组
  8. .表示查找任何字符。如果在这里没有它,那么它将删除第一个冒号之前的所有内容,然后下一组将位于行首,因此您将删除太多内容。你可以在这里技术上放一个加号或星号,但你不需要它。
  9. 右括号结束第二组
  10. 替换为框中,\2(如果您愿意,可以是反斜杠或反向实心)将获取第二组的内容,并用这些内容替换它找到的所有内容

这是测试输入和输出:

输入(粘贴了一些制表符、空格和其他内容)

n1:n1:n1
n1:n1:n2
n1:n1:n3
n2:n1:n3
n4:n7:n5

o1:n1:n1:m1:m1:l1:l7b:l1011
z99:

-- Here's some more data
o1:o2:o3:o4:o5
:o2:o3:o4:o5:o6
     o1:o1:o3:x37:n99
    n2:o1:o3:o44:z76
  n4:n7:n5:u72:j9:

输出

n1:n1
n1:n2
n1:n3
n1:n3
n7:n5
n1:n1:m1:m1:l1:l7b:l1011
z99:
o2:o3:o4:o5
:o2:o3:o4:o5:o6
o1:o3:x37:n99
o1:o3:o44:z76
n7:n5:u72:j9:

注意,它删除了没有冒号的任何行,这在某些情况下可能更可取。 它还错过了我放进去的两行,其中一行在开头或结尾有一个冒号。
如果您想保留这些空行,请在步骤3中的括号中添加\ r \ n(这些是反斜杠)。 然后它将查找任何不是冒号或行尾的字符(步骤3),后跟冒号(步骤5)。 因此,它仅删除带有冒号的行上的字符。 将查找内容更改为此字符串:
查找内容:^([^:\r\n]+):(.) 要捕获以冒号开头或第一个冒号后面没有内容的行,请将加号更改为星号,并在点后面添加一个问号:
查找内容:^([^:\r\n]*):(.?)

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接