Regex 正则表达式捕获组子字符串

Regex 正则表达式捕获组子字符串,regex,replace,find,notepad++,substring,Regex,Replace,Find,Notepad++,Substring,试图在记事本+中使用正则表达式。我希望发生以下情况: 名字:乔纳森 替换为: 名字:Jona 我尝试了以下方法: 查找语句 名字:(*) 替换语句: 名字:\1 为了把它放进一个被俘的小组。但是现在我需要捕获的组是截断/子字符串,所以它只是第一个四个字符。当我进行替换时,它会很好地替换整个字符串,但我不清楚如何只获取捕获组的前四个字符。我尝试了(.*){4},但没有返回任何结果 谢谢大家! 这里有一条路要走: 查找内容:(名字:.{1,4})。*?$ 替换为:$1 我不确定是否有办法只访问匹配

试图在记事本+中使用正则表达式。我希望发生以下情况:

名字:乔纳森

替换为:

名字:Jona

我尝试了以下方法:

查找语句

名字:(*)

替换语句:

名字:\1

为了把它放进一个被俘的小组。但是现在我需要捕获的组是
截断/子字符串
,所以它只是第一个四个字符。当我进行替换时,它会很好地替换整个字符串,但我不清楚如何只获取捕获组的前四个字符。我尝试了
(.*){4}
,但没有返回任何结果

谢谢大家!

这里有一条路要走:

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

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

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

FirstName: (.{4}).*?$
这可以翻译为“找到字符串‘FirstName:’,然后记住接下来的四个字符,然后一直到行尾。”

您的replace语句将与以前几乎相同(我在FirstName后面加了一个空格):


如果它位于行的开头,并且是面向行的,
或者是唯一的行项目,这将起作用

查找:
(?im)^[^\S\r\n]*(名字:)[^\S\r\n]*([a-z]{0,4}.{0,4})。*

替换:
FirstName$1

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

此模式只会麻烦处理要截断的多余长度的行

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

使用这个:()

查找:
FirstName:.{4}\K.+

替换:[无]


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

请注意,如果“FirstName:”后面的字符少于4个,则此正则表达式将不匹配,并将被完全忽略,这与捕获
(.{1,4})
并重新插入它是一样的。事实上,
*?
可以替换为
+?
,并且在“FirstName:”后面正好有4个字符的示例也将被忽略。但在大多数情况下(除非案件不敏感和其他怪异),这是相当的。
FirstName: \1