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

63

我有

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

在文本文件中列出文件名等等。

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


3个回答

98
替换
^(\d+)\.(.*mp3)$
with
\1 \2

近期的Notepad++版本中,它也会接受以下内容,这也被其他集成开发环境/编辑器(例如JetBrains产品如Intellij IDEA)接受:

$1 $2

这假设notepad++的正则表达式匹配引擎支持分组。正则表达式基本上意味着:将第一个点前面的数字作为第一组进行匹配,将它后面的所有内容作为第二组进行匹配(但仅在以mp3结尾时)。


2
@Doug 是的,组是由括号定义的。 - Ioan Alexandru Cucu
非常感谢,我甚至不知道使用正则表达式可以做到这一点。 - Pieter De Bie
谢谢。但是为了匹配所有行,我在不使用 ^ 的情况下也能成功。否则它只会匹配第一行。在 https://regexr.com/ 上测试过。 - Farrukh Waheed

4

我使用了vscode进行测试。你必须使用带有括号的分组(正则表达式的分组)

实例说明

  • 从示例数据开始
1 a text
2 another text
3 yet more text
  • 使用正则表达式查找数字和空格。这里的分组将是数字,因为它被括号包围。
(\d)\s
  • 运行替换正则操作。将每行中的空格替换为短横线,但保留数字或数字符号。
$1-
  • 输出
1-a text
2-another text
3-yet more text

-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


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接