我正在使用 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,
最佳答案
在 textpad 或 notepad++ \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/