试图在Notepad++
中使用正则表达式。我想有以下发生:正则表达式捕获组子串
姓:乔纳森
替换为:
姓:乔纳
我已经试过如下:
查找声明
姓:
替换表(*):
姓:\ 1
为了把它变成所捕获的基团。但现在我需要那个被捕获的组是truncated/substring
,所以它只是第一个四个个字符。当我进行替换时,它会替换完整的字符串,但我不清楚如何获取捕获组的前四个字符。我试过(.*){4}
但是没有任何回报。
谢谢!
试图在Notepad++
中使用正则表达式。我想有以下发生:正则表达式捕获组子串
姓:乔纳森
替换为:
姓:乔纳
我已经试过如下:
查找声明
姓:
替换表(*):
姓:\ 1
为了把它变成所捕获的基团。但现在我需要那个被捕获的组是truncated/substring
,所以它只是第一个四个个字符。当我进行替换时,它会替换完整的字符串,但我不清楚如何获取捕获组的前四个字符。我试过(.*){4}
但是没有任何回报。
谢谢!
这里有很长的路要走:
(FirstName:.{1,4}).*?$
$1
我不知道有访问只是一部分的方式匹配的组,但您可以只匹配您想要的部分。
你的新发现语句将只捕获前4个字符,但仍符合其他:
FirstName: (.{4}).*?$
转换为“查找字符串‘姓:’,然后记下四个字符,然后继续一直走到最后。“
你REPLACE语句就几乎和以前一样(我包括名字后有一个空格):
FirstName: \1
如果它是在该行和线的导向开始,
或唯一的行项目,这将工作。
查找:(?im)^[^\S\r\n]*(firstname:)[^\S\r\n]*([a-z]{0,4}|.{0,4}).*
替换:FirstName $1
如果它在字符串的中间,它会采取更多的努力。
必须看到一些例子,因为必须使用伪锚。
此模式只会打扰多余长度的处理线以截断。
我的模式不仅会在步数/效率方面超越其他答案,而且它也不会在替换字段中引用任何参考或文本。
使用此:(Pattern Demo)
查找:FirstName: .{4}\K.+
替换:[无]
*注意,在\K
意味着 “开始从这点匹配”。 .+
将停在每行的末尾。
请注意,如果在“FirstName:”之后少于4个字符,则该正则表达式将不匹配,并且将被完全忽略,这与捕获'(。{1,4})'相同,插入它。实际上'。*?'可以用'。+?'替换,并且在“FirstName:”之后的正好有4个字符的例子也会被忽略。但是对于大多数情况(除非不区分大小写和其他奇怪),这些都是相同的。 – c0d3rman