6

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

编辑器内容示例:

select
    'tab'   
,   'space' 

select
    'tabs'      
,   'spaces'  

目标:

select
    'tab'
,   'space'

select
    'tabs'
,   'spaces'

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

4

1 回答 1

6

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

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

多行修饰符(?m)是使$锚匹配的结尾而不是整个字符串所必需的。匹配除制表符之外的\p{Zs}任何 Unicode水平空白,因此,我们需要将\t和添加\p{Zs}到字符类[...]中。+量词将匹配这些空格的 1 次或多次出现。

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

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

并替换为$1反向引用(重新插入模式中第一个(也是唯一一个)捕获组捕获的文本,即在输出中保留行尾)。

详情

  • [^\S\r\n]+- 匹配除非空格、CR 和 LF 之外的 1 个或多个字符(基本上,\s除了\rand之外的 an \n
  • (\r?\n|$)- 匹配行尾(可选CR、回车强制LF、换行)或字符串末尾( $)。
于 2016-08-11T14:28:13.263 回答