正则表达式用逗号替换行尾的多个空格或添加逗号

标签 regex textpad

我正在使用 Regex 和 TextPad 来清理和准备 sql 脚本。我想用逗号替换或添加逗号:

  • 每行末尾有 1 个或多个空格
  • 在每行末尾或最后一行(即“文件末尾”)

经过几个小时的研究和迭代,我得出了以下结果,它接近我想要的结果,但并不完美。我如何编辑它以获得以下所需的结果?

查找内容: ' +$|(\n)|$(?![\r\n])'

替换为: '\1\2,'

我的数据看起来像

       dog  *(2 spaces)*
        cat    *(4 spaces)*
        bird*(no space)*
       rodent *(1 space)*
      fish*(no space)*

我想要的结果是

    dog,
    cat,
    bird,
    rodent,
    fish,

我的结果是

        dog,
         cat,
         bird
    ,     rodent,
         fish,

最佳答案

textpadnotepad++ \s*$ 中可以使用,但值得一提的是,如果在其他环境中使用它可能会导致undesired matches (regex101)如果行尾有空格,则添加一个额外的逗号。原因是,例如在 cat 中,它将匹配 cat 后面的空格(第一个匹配)以及末尾的零长度匹配行(第二场比赛)。

\s*$ 的另一个潜在问题可以在此处阅读:The RegEx that killed StackOverflow (blog)

如果文本中有很多空格,可能会导致大量回溯 (regex101 demo) 。该演示输入需要大约 7k 个步骤才能删除末尾的一些空格。减少步骤的解决方法可以是消耗capture到最后的部分non-white-space (如果有的话)。

^(.*\S)?\s*$

Replace with $1, (regex101 demo)设置为 optional 的第一组捕获的内容甚至只匹配空白。这会将其减少到 100 多步。

关于正则表达式用逗号替换行尾的多个空格或添加逗号,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/76337249/

相关文章:

java - 带组的字符串正则表达式

notepad++ - 如何创建仅在 Notepad++ v 7.8.2 中打开特定文件的快捷方式

regex - 使用可变字符串正则表达式条件删除

javascript - 用于匹配样式标签的正则表达式

java - TextPad 不会将类保存为 .java

空格的正则表达式,然后行尾

java - 代码可以在 Netbeans 中运行,但不能在 TextPad 中运行?

regex - 将javascript正则表达式转换为swift nsregularexpression

regex - Matlab:查找字符串模式并将其替换为随机字符串

regex - 如何在字符串中查找匹配模式而不考虑顺序?