使用正则表达式在 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(?!)
。这在大多数情况下都适用,除非一个字母表中的关键字只出现一次,在本例中为 other
。 Link to regex.
可以看出,national
和 random2
匹配,但 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
以匹配任何换行序列。
我想格式化包含按字母顺序排序的关键字的文件,如下所示:
...
national day
national
other
random
random2
...
我想在以不同字母开头的关键字之间放置一个 space(意思是 space 在 a 和 b 之间等等),它看起来像这样:
...
national day
national
other
random
random2
...
我正在使用正则表达式执行此操作,我尝试的正则表达式是 \n(.{1,1})(?:.*?)\n(?!)
。这在大多数情况下都适用,除非一个字母表中的关键字只出现一次,在本例中为 other
。 Link to regex.
可以看出,national
和 random2
匹配,但 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
以匹配任何换行序列。