尝试将所有空格替换为单个空格

14

我的程序是一个文件验证工具。我需要读入一个格式文件,然后通过单个空格解析每一行。但显然,编写格式文件的人可能使用制表符、两个空格或任何形式的空白符号,我正在寻找一些代码来解决这个问题。我尝试了这个:

public static string RemoveWhitespace(this string line)
{
    try
    {
        return new Regex(@"\s*").Replace(line, " ");
    }
    catch (Exception)
    {
        return line;
    }
}

我假设这是错误的。我该怎么办?


如果您要多次执行此操作,建议事先存储构造Regex对象。一个私有的静态只读变量就可以了。这样,每次替换行时都避免了正则表达式引擎的创建。 - Skurmedel
@Skurmedel:或者直接使用内置的静态Regex.Replace方法。 - LukeH
@LukeH:我觉得你没有理解我的意思。你可以预构建正则表达式对象的原因不仅仅是为了方便重用。请参见此处http://msdn.microsoft.com/en-us/library/system.text.regularexpressions.regex.aspx“静态方法与实例方法”。当然,如果他/她的应用程序中没有使用15个不同的正则表达式,那么可能就没有问题了。但我不知道他/她的应用程序。这就是为什么我说“可能”。 - Skurmedel
1
静态方法缓存了最近使用的有限数量的模式,因此如果您知道在调用之间您的应用程序没有使用Regex做其他事情,那么这是最优的。如果您在库中执行此操作,则可能更喜欢自己的静态实例,以确保使用该库的应用程序不会意外地导致缓存未命中。 - stevemegson
可能是重复问题:*如何在C#中用单个空格替换多个空格?* - Peter Mortensen
2个回答

37

你可以这样做 -

System.Text.RegularExpressions.Regex.Replace(str,@"\s+"," ");

其中str是你的字符串。


我真的很想把这个作为我的答案接受,但它似乎不起作用。它一直在抛出异常。另外,一个普遍的问题;关于正则表达式,'\s'是否只是表示空格? - New Start
@新手入门 - 你能告诉我错误是什么吗?希望你正在使用正确的命名空间,对吧? - Sachin Shanbhag
@新的开始 - '\s' 匹配空格字符。请查看此链接 - http://www.regular-expressions.info/charclass.html#shorthand - Sachin Shanbhag
@新的开始 - 我已经在我的端上尝试过了,它可以正常工作。如果您能告诉我您的错误,我可以帮助您解决问题。 - Sachin Shanbhag
我使用了正确的命名空间!我的问题是我返回的是原始行而不是编辑后的行。感谢您的帮助! - New Start

0
input = input.Replace("\t", " ");

List<string> empties = new List<string>();
for (int i=input.Length - 1; i>1; i--)
{
    string spcs = "";
    for (int j=0; j<=i; j++)
        spcs += " ";
    if (input.Contains(spcs))
        empties.Add(spcs);
}

foreach (string s in empties)
    input = input.Replace(s, " ");

那似乎是一种非常低效的方式。它的内存和执行时间成本是多少? - Peter Mortensen

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接