如何在正则表达式中组合多行?

5

我是一个刚接触正则表达式的新手,目前只使用简单的文本编辑器来学习。我有以下文件:

          84544484N
          32343545M
          32334546E
          34456434M

我正在尝试将每对行合并为一个制表符分隔的行。 结果应为:
        84544484N  32343545M
        32334546E  34456434M

我写了以下内容:

            Search: (.*?)\n(.*?)
            Replace: \1\t\2

这个方法没有起作用,有人能解释一下原因并给出正确的解决方案吗?谢谢!


什么是文本编辑器? - Wiktor Stribiżew
Sublime @WiktorStribiżew - Sara Hamad
1个回答

3

(.*?)\n(.*?)模式永远不会有效,因为模式末尾的(.*?)始终会返回一个空字符串(因为*?是一种懒惰匹配量词,如果它可以返回零个字符(它可以),它就会这样做。使用贪婪匹配并调整模式,如下:

(.+)\r?\n *(.*)

或者——由于SublimeText使用Boost正则表达式——您可以使用\R匹配任何换行符序列:

(.+)\R *(.*)

并将其替换为\1\t\2。请注意,我在第一个捕获组中使用+替换了*?,因为您需要匹配非空行。

正则表达式分解:

  • (.+) - 除换行符外的一个或多个字符(尽可能多)直到
  • \R - 换行序列(\r\n\r或仅\n
  • * - 文字空格,出现零次或多次
  • (.*) - 第二个组:除换行符外的零个或多个字符(尽可能多)

enter image description here                                                                      / enter image description here


请问一下,\r 是什么意思,为什么在这里使用了它?谢谢。 - Sara Hamad
\r 是回车符,在正则表达式模式中,我对它应用了 ? 量词,表示匹配零个或一个。使用 \R 更有效率 - 它将匹配所有类型的换行符。 - Wiktor Stribiżew
1
在 Sublime Text 3 中像老板一样工作,感谢 @WiktorStribiżew! - fusion27

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