在SSMS 2016中使用正则表达式替换来修剪线条

时间:2016-08-11 14:21:02

标签: regex ssms regex-greedy ssms-2016

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

编辑内容示例:

select
    'tab'   
,   'space' 

select
    'tabs'      
,   'spaces'  

目标:

select
    'tab'
,   'space'

select
    'tabs'
,   'spaces'

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

1 个答案:

答案 0 :(得分:4)

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

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

多线修饰符(?m)是使$锚点匹配结束而非整个字符串所必需的。 \p{Zs}匹配任何Unicode 水平空格但是匹配标签字符,因此,我们需要将\t\p{Zs}添加到字符类[...]中。 +量词将匹配这些空格的一次或多次出现。

不依赖于多线修改器的替代方案:

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

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

<强>详情:

  • [^\S\r\n]+ - 匹配除非空格,CR和LF之外的1个或多个字符(基本上是\s\r\n除外
  • (\r?\n|$) - 在该行的末尾匹配(可选 CR,回车必须 LF,< em> newline )或在字符串$)的末尾。