使用正则表达式在 sublime 中格式化文本

Formatting text in sublime using regex

我想格式化包含按字母顺序排序的关键字的文件,如下所示:

...
national day
national
other
random
random2
...

我想在以不同字母开头的关键字之间放置一个 space(意思是 space 在 a 和 b 之间等等),它看起来像这样:

...
national day
national

other

random
random2
...

我正在使用正则表达式执行此操作,我尝试的正则表达式是 \n(.{1,1})(?:.*?)\n(?!)。这在大多数情况下都适用,除非一个字母表中的关键字只出现一次,在本例中为 otherLink to regex.

可以看出,nationalrandom2 匹配,但 other 不匹配,尽管我相信有充分的理由。

有效的正则表达式是 ^(.{1,1})(?:.*?)\n(?!)(第一个 \n 替换为 ^)但我需要一个原因来说明为什么第一个正则表达式与 other 不匹配.谢谢。

您的正则表达式在该行之前和之后都使用换行符。在下面的演示中,请注意引擎如何跳过 other 行:

您可以使用另一种环视修复模式,(?<=\n) 正向后视:(?<=\n)(.).*\n(?!),参见 demo

但是,您可以使用更 "linear" 没有环顾四周的模式:

^(.).*(?:\n.*)*

或者如果支持\R

^(.).*(?:\R.*)*

替换为[=16=]\n。见 regex demo.

详情

  • ^ - 行首
  • (.) - 捕获组 1:除换行符以外的任何字符 char
  • .* - 一行的剩余部分
  • (?:\n.*)* - 零次或多次重复
    • \n - 一个换行符
    • </code> - 与组 1</li> 中相同的字符 <li><code>.* - 该行的其余部分。

\n 替换为 \R 以匹配任何换行序列。