在 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 horizontal 空格但制表符字符,因此,我们需要将 \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 ($
) 的末尾.
如何使用 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 horizontal 空格但制表符字符,因此,我们需要将 \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 ($
) 的末尾.