在搜索/替换的“替换”部分使用正则表达式?

在搜索/替换的“替换”部分使用正则表达式?

我有大量制表符缩进(轮廓化)的文本,但缺少前导项目符号:

        some point
            a sub-point

我想用 2 个空格替换每个制表符,并在前面添加连字符。这是我需要的目标格式:

  - some point
    - a sub-point

寻找:
我可以使用正则表达式\t+\S来查找“任意数量的制表符,后跟任意非空格”。这工作得很好,并且“查找”函数会突出显示每行的开头,直到第一个非制表符。

代替:
如何使用正则表达式指定“将每个制表符替换为 2 个空格,后跟一个连字符和一个空格,后跟原始非制表符字符”?具体来说:

  1. 我如何指定替换发生“与找到的匹配次数一样多”?(因此三个制表符将变成六个空格,等等)
  2. 如何指定文字“一个连字符然后一个空格”?
  3. 如何指定“保持非制表符不变”?

我的谷歌功夫让我的概念\1但我不知道如何使用它。我的反复试验只产生了错误。
更新:
我发现了一个问题\1:我必须在我的寻找字符串: (\t+)(\S)然后在代替部分:\1- \2。这帮助我解决了上面的第 2 项和第 3 项,但对于第 1 项,我仍然不知所措!
更新:
嗯 - 只要文本中其他地方没有制表符,#1 就可以是一个简单的非正则表达式查找/替换操作。这是我现在需要调查的事情!

我正在尝试使用 Ubuntu 的编辑但我也可以记事本++或者升华如果您有针对编辑器的建议。

答案1

您可以使用 Notepad++ 通过两个步骤完成此操作:

第一步:

  • Ctrl+H
  • 找什么:\t
  • 替换为:    (2 个空格)
  • 检查环绕
  • 检查正则表达式
  • Replace all

第二步:

  • 找什么:^\h+
  • 用。。。来代替:$0-
  • 检查环绕
  • 检查正则表达式
  • Replace all

解释:

^       : beginning of line
\h+     : 1 or more horizontal spaces

替代品:

$0      : the whole match (ie. all the spaces at the beginning of each line)
-       : a dash followed by a space

答案2

您可以使用两种方法。

您可以搜索整个字符串 + 后面的内容,并使用分组将其替换为一个或多个组(但不是全部)。这就是$1or\1发挥作用的地方。

您也可以只搜索要替换的部分,然后用其他部分替换它。

首先,构建要明确替换的正则表达式并搜索该正则表达式。如果您的搜索搜索字符串的多个部分,并且您想保留中间的部分,则需要分组。示例:搜索[b]text[/b]并替换为<b>text</b>

你的正则表达式应该是这样的\[b\](.+)\]\/b\],并将其替换为<b>\1</b>

如果您只需要更改每个连续字符串的文本,则可以专门搜索并替换它。例如,搜索         -My example并替换它 - My example(基本上将任何制表符替换为两个空格,并在 - 后添加一个空格),您可以搜索\t+-并替换它 -

此处的正则表达式表示:搜索出现 1 次或多次且后跟连字符的任何制表符。如果您搜索此字符串但不实际替换它,您将看到它将选择要替换的文本。

如果你想用两个空格替换任何制表符,你只需搜索\t并将其替换为 

请注意,我在这篇文章的所有地方都使用空格后跟 alt+255 来连续输入 2 个空格,否则 SuperUser 会将所有内容压缩为 1 个空格。

相关内容