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

zz2j4svz  于 2023-05-30  发布在  其他
关注(0)|答案(2)|浏览(169)

我正在使用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,
nbysray5

nbysray51#

我觉得你把事情搞复杂了。只要匹配行末尾的任意数量的空格,并替换为逗号。
查找:\s*$替换为:,

1dkrff03

1dkrff032#

textpadnotepad++\s*$中可以工作,但值得一提的是,如果在另一个环境中使用它,它可能会导致undesired matches (regex101),并在行尾有空格时添加额外的逗号。原因是,例如在cat中,它将匹配cat之后的空格(* 第一个匹配 )加上行尾的零长度匹配( 第二个匹配 *)。
\s*$的另一个潜在问题可以在这里阅读:The RegEx that killed StackOverflow (blog)
如果文本中有很多空格,则会导致大量的回溯(regex101 demo)。这个演示输入需要大约7k的步骤,只是为了在最后删除一些空格。减少步骤的解决方法是 * 消耗 * 和capture直到最后一个非空白(如果有)。

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

Replace with $1, (regex101 demo)第一个组捕获的内容,设置为optional,甚至只匹配空白。这将使它下降到100多步。

相关问题