我有大量制表符缩进(轮廓化)的文本,但缺少前导项目符号:
some point
a sub-point
我想用 2 个空格替换每个制表符,并在前面添加连字符。这是我需要的目标格式:
- some point
- a sub-point
寻找:
我可以使用正则表达式\t+\S
来查找“任意数量的制表符,后跟任意非空格”。这工作得很好,并且“查找”函数会突出显示每行的开头,直到第一个非制表符。
代替:
如何使用正则表达式指定“将每个制表符替换为 2 个空格,后跟一个连字符和一个空格,后跟原始非制表符字符”?具体来说:
- 我如何指定替换发生“与找到的匹配次数一样多”?(因此三个制表符将变成六个空格,等等)
- 如何指定文字“一个连字符然后一个空格”?
- 如何指定“保持非制表符不变”?
我的谷歌功夫让我的概念\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
您可以使用两种方法。
您可以搜索整个字符串 + 后面的内容,并使用分组将其替换为一个或多个组(但不是全部)。这就是$1
or\1
发挥作用的地方。
您也可以只搜索要替换的部分,然后用其他部分替换它。
首先,构建要明确替换的正则表达式并搜索该正则表达式。如果您的搜索搜索字符串的多个部分,并且您想保留中间的部分,则需要分组。示例:搜索[b]text[/b]
并替换为<b>text</b>
你的正则表达式应该是这样的\[b\](.+)\]\/b\]
,并将其替换为<b>\1</b>
如果您只需要更改每个连续字符串的文本,则可以专门搜索并替换它。例如,搜索 -My example
并替换它 - My example
(基本上将任何制表符替换为两个空格,并在 - 后添加一个空格),您可以搜索\t+-
并替换它 -
此处的正则表达式表示:搜索出现 1 次或多次且后跟连字符的任何制表符。如果您搜索此字符串但不实际替换它,您将看到它将选择要替换的文本。
如果你想用两个空格替换任何制表符,你只需搜索\t
并将其替换为
请注意,我在这篇文章的所有地方都使用空格后跟 alt+255 来连续输入 2 个空格,否则 SuperUser 会将所有内容压缩为 1 个空格。