【问题标题】:Remove extra white spaces on string with special characters删除带有特殊字符的字符串上的多余空格
【发布时间】:2013-08-07 18:13:11
【问题描述】:

我无法从以下内容中删除多余的空格:

abc\ae.exe        a 1 b 2%%  ACU > log.txt

我正在使用以下代码删除多余的空格(我在 S.O. 上找到的):

Regex.Replace(cmdLine, @"^\s*$\n", string.Empty, RegexOptions.Multiline).TrimEnd();

上面的代码删除了 abc\ae.exe & a fine; 之间多余的空格。但是,它不会从 2%% ACU 中删除额外的空白(中间有两个空格)。

我对 reg 表达式不是很熟悉,但我认为这与 % 符号可能是 reg ex 关键字有关。

任何指导将不胜感激。

【问题讨论】:

  • 为什么不直接用 1 个空格代替 2 个空格呢?如果它包含选项卡,则将[ \t]* 替换为“”。只做空格时,反引号似乎有问题
  • 嗨。我正在测试一条你不会知道不同单词之间有多少空格的行。

标签: c# regex


【解决方案1】:
Regex.Replace(cmdLine,@"\s+"," ");

将用一个空格替换多个空格

+ 表示match the character one or more times

这是Regex Guide For C#

【讨论】:

  • 您好,感谢您的回复。我在使用此表达式“abc\abc.exe”的以下字符串时遇到问题。如您所见,如果我输入该表达式中没有空格的字符串,它将返回“abc bc.exe”。它从字符串中删除 '\a'。谢谢!
  • 在我的测试中,它与该输入配合得很好,如果没有空格,则不会替换任何内容。
  • 这很奇怪。我没有得到以下测试来通过'ingsda\test_asdsafd.exe s 1 b 2%% cldtg > log.txt'。它返回 'ingsda est_asdsafd.exe s 1 b 2%% cldtg > log.txt'
  • 当我在字符串中添加下划线'_'时出现问题。那个正则表达式失败。s
  • 让它工作。在字符串前面添加了“@”以将其转换为文字。谢谢!
【解决方案2】:

如果您想挑选特定的空白字符而不是 \s 中包含的所有字符,也可以使用 Character Groups 完成此操作(相当于 [ \f\n\r\t\v]

string test = @"abc\ae.exe           a 1 b 2%%  ACU > log.txt";
// Replace one more more space characters with a single space
// Add other whitespace characters inside [ ] (ex: \t)
string no_space2 = Regex.Replace(test,@"[ ]+"," ");

【讨论】:

    猜你喜欢
    • 2021-10-16
    • 2014-08-17
    • 1970-01-01
    • 2018-11-10
    • 1970-01-01
    • 2011-08-05
    相关资源
    最近更新 更多