Regex Capture Group子串

时间:2016-08-09 16:54:31

标签: regex replace find notepad++ substring

尝试在Notepad++中使用正则表达式。我希望发生以下情况:

名字:乔纳森

取代:

名字:Jona

我尝试过以下方法:

查找声明

  

姓:

(*)。

替换声明:

  

姓:\ 1

为了将其放入捕获的组中。但现在我需要抓取的群组为truncated/substring,因此它只是第一个四个字符。当我进行替换时,它会完全替换完整的字符串,但我不清楚如何只获取捕获组的前四个字符。我试过了(.*){4},但没有回复。

谢谢!

4 个答案:

答案 0 :(得分:2)

我不确定是否有办法只访问匹配组的一部分,但您只能匹配您想要的部分。

您的新查找语句仅捕获前4个字符,但仍与其余字符匹配:

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

这转换为“找到字符串'FirstName:',然后记住接下来的四个字符,然后一直持续到行尾。”

你的替换语句几乎和以前一样(我在FirstName后面加了一个空格):

FirstName: \1

答案 1 :(得分:1)

这是一种方法:

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

答案 2 :(得分:0)

如果它位于行和行的开头,则为 或唯一的项目,这将工作。

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

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

答案 3 :(得分:0)

此模式只会打扰超长的处理行进行截断。

我的模式不仅在步数/效率方面优于其他答案,而且也不会对替换字段中的任何引用或文本感到烦恼。

使用此:(Pattern Demo

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

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