【问题标题】:Remove trailing spaces in visual studio 2012删除 Visual Studio 2012 中的尾随空格
【发布时间】:2013-09-13 06:39:13
【问题描述】:

我想从文本文件中删除每一行的尾随空格,保持换行符不变。为此,我正在使用 Visual Studio 2012 的 Regex 功能。

当我试图找到 \s*\r?\n 并替换为 \r\n 时,它也会删除所有空行,这是意料之外的。

我有什么遗漏的吗?

【问题讨论】:

  • \s 匹配换行符。尝试改用“”(空格)。
  • 我也想删除 \t 和其他可能的空格字符。
  • 然后让\s* 变得懒惰。 \s*?
  • \s+\r?\n 应该这样做
  • 我在 vs12 中尝试过以下方法,似乎可以工作:[\t ]+\r?$

标签: regex visual-studio-2012


【解决方案1】:

设置减法来救援!

[\s-[\n]]+\n

...或任何空白字符 (\s) 除了 (-) 换行符 ([\n])。通常,- 被视为范围运算符或文字连字符(取决于其在字符类中的位置),[ 被视为文字括号。但如果连字符后跟一个看起来像字符类的东西,它就变成了一个集合减法运算符。

参考:Character Classes in Regular Expressions

【讨论】:

  • 不错 - 设置减法 - 这是我第一次看到有人使用它们 :)
  • 我一直忘记它是可用的。它比 Java 的集合交集([\s&&[^\n]])方便多了,更别提更容易阅读了。
【解决方案2】:

如果您不想替换它们,为什么要尝试匹配回车符\r 和换行符\n,然后用\r\n 替换所有内容。

而是只匹配空格和制表符以及您想要剥离的任何其他空白字符,并将其替换为空字符串,如下所示:

[ \t]*$

这将匹配每行末尾的零个或多个空格或制表符,并将它们替换为空字符串。

注意:您必须使用多行模式,所以$ 匹配每一行的末尾。

如果您无法在 VS 中激活多行模式,那么您可以使用另一个不需要的表达式:

[ \t]*(?=\r?\n)

这将匹配零个或多个制表符和空格,只要它们后跟可选的回车符,然后是换行符,或者换句话说,只要它们位于行尾。

【讨论】:

  • 多行模式通常是文本编辑器的默认设置。我没有使用真正的(.NET)正则表达式支持的新 VS,但如果不是这种情况,我会非常惊讶。
【解决方案3】:

我知道这是旧的,但我使用搜索并用 Visual Studio 的正则表达式替换此字符串(无引号) " +\r?$" 并将替换字段留空,然后全部替换。这保留了换行符并适用于 VS 正则表达式。

【讨论】:

  • 在 SSMS 18 中唯一对我有用的解决方案,据说是使用 VS shell。
猜你喜欢
  • 2010-09-10
  • 2019-07-12
  • 2015-04-27
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2020-06-04
  • 1970-01-01
相关资源
最近更新 更多