使用正则表达式替换时,如何保留匹配字符串的一部分?

问题描述 投票:0回答:4

我有

12.hello.mp3
21.true.mp3
35.good.mp3
.
.
.

依此类推,文件名列在文本文件中。

我只需要用空格替换数字前面的点(.)。(例如 12.hello.mp3 => 12 hello.mp3)。 如果我的正则表达式为“[0-9].”,它也会替换数字。 请帮助我。

regex notepad++
4个回答
101
投票

更换

^(\d+)\.(.*mp3)$

\1 \2

此外,在最新版本的 notepad++ 中,它还接受以下内容,其他 IDE/编辑器也接受以下内容(例如 Intellij IDEA 等 JetBrains 产品):

$1 $2

这假设notepad++正则表达式匹配引擎支持组。正则表达式的基本含义是:将第一个点前面的数字匹配为组 1,将其后面的所有数字匹配为组 2(但前提是它以 mp3 结尾)


4
投票

我用vscode测试过。您必须使用带括号的组

(group of regex)

实际例子

  • 从样本数据开始
1 a text
2 another text
3 yet more text
  • 执行正则表达式来查找/搜索数字和空格。这里的组将是数字,因为它被括在括号中
(\d)\s
  • 运行替换正则表达式操作。替换破折号的空格,但保留每行中的数字或数字
$1-
  • 输出
1-a text
2-another text
3-yet more text

0
投票

这里的答案对我来说没有多大意义,我花了一段时间才弄清楚。


假设我有这个字符串:

  • return this.logSomething('text');

我想把它变成这样:

  • this.logSomething('text'); return;

...那么这就是查找字段应包含的内容:

  • return (this.logSomething\('[a-zA-Z0-9]*'\);)

这就是替换字段应包含的内容:

  • $1 return;

这里的见解是查找字段中的附加括号。它们界定了您的组,然后您可以使用

$1
$2
等进行引用。


-1
投票

使用基本模式,在此处接受的答案中详细描述了一个示例,将

class="odd"
class="even"
添加到
Notepad++
或任何其他正则表达式兼容编辑器中的每个 <tr> 元素:

查找内容:

(<tr><td>)(.*?\r\n)(<tr><td>)(.*?\r\n)

替换为:

<tr class="odd"><td>\2<tr class="even"><td>\4

© www.soinside.com 2019 - 2024. All rights reserved.