2016-08-09 125 views
1

试图在Notepad++中使用正则表达式。我想有以下发生:正则表达式捕获组子串

姓:乔纳森

替换为:

姓:乔纳

我已经试过如下:

查找声明

姓:

替换表(*):

姓:\ 1

为了把它变成所捕获的基团。但现在我需要那个被捕获的组是truncated/substring,所以它只是第一个四个个字符。当我进行替换时,它会替换完整的字符串,但我不清楚如何获取捕获组的前四个字符。我试过(.*){4}但是没有任何回报。

谢谢!

回答

1

这里有很长的路要走:

  • 查找内容:(FirstName:.{1,4}).*?$
  • 替换为:$1
1

我不知道有访问只是一部分的方式匹配的组,但您可以只匹配您想要的部分。

你的新发现语句将只捕获前4个字符,但仍符合其他:

FirstName: (.{4}).*?$ 

转换为“查找字符串‘姓:’,然后记下四个字符,然后继续一直走到最后。“

你REPLACE语句就几乎和以前一样(我包括名字后有一个空格):

FirstName: \1 
+0

请注意,如果在“FirstName:”之后少于4个字符,则该正则表达式将不匹配,并且将被完全忽略,这与捕获'(。{1,4})'相同,插入它。实际上'。*?'可以用'。+?'替换,并且在“FirstName:”之后的正好有4个字符的例子也会被忽略。但是对于大多数情况(除非不区分大小写和其他奇怪),这些都是相同的。 – c0d3rman

0

如果它是在该行线的导向开始,
或唯一的行项目,这将工作。

查找:(?im)^[^\S\r\n]*(firstname:)[^\S\r\n]*([a-z]{0,4}|.{0,4}).*
替换:FirstName $1

如果它在字符串的中间,它会采取更多的努力。
必须看到一些例子,因为必须使用伪锚。

0

此模式只会打扰多余长度的处理线以截断。

我的模式不仅会在步数/效率方面超越其他答案,而且它也不会在替换字段中引用任何参考或文本。

使用此:(Pattern Demo

查找:FirstName: .{4}\K.+
替换:[无]

*注意,在\K意味着 “开始从这点匹配”。 .+将停在每行的末尾。