在 SSMS 2016 中使用正则表达式替换为 trim 行

Using regex replace in SSMS 2016 to trim lines

如何使用 SSMS 2016 正则表达式替换功能删除行尾的多余空格和制表符?

编辑内容示例:

select
    'tab'   
,   'space' 

select
    'tabs'      
,   'spaces'  

目标:

select
    'tab'
,   'space'

select
    'tabs'
,   'spaces'

在 SSMS 2012 中,查找字符串 :b*$ 匹配那些额外的制表符和空格,并允许我将它们替换为空。 SSMS 2016 开始为 find/replace 功能使用某种 .net 正则表达式语法。使用 \s+$ 几乎可以在 2016 年使用,但它会删除空行。

要使用 .NET 正则表达式从 末尾删除尾随 水平 空格,您需要使用

(?m)[\p{Zs}\t]+$

必须使用多行修饰符 (?m) 才能使 $ 锚点匹配 的结尾而不是整个字符串。 \p{Zs} 匹配任何 Unicode horizo​​ntal 空格但制表符字符,因此,我们需要将 \t\p{Zs} 添加到字符 class [...]+ 量词将匹配这些空格的 1 次或多次出现。

不依赖多行修饰符的替代方案:

[^\S\r\n]+(\r?\n|$)

并替换为 </code> 反向引用(重新插入文本 <em>captured</em> 由第一个(也是唯一的)<em>capturing group</em> 在模式中,即在输出中保留行尾)。</p> <p><strong>详情</strong>:</p> <ul> <li><code>[^\S\r\n]+ - 匹配除非空格、CR 和 LF 之外的 1 个或多个字符(基本上是 \s\r\n 除外)

  • (\r?\n|$) - 匹配行尾 (optional CR, carriage return,和 obligatory LF,newline) 或在 string ($) 的末尾.