46

我正在构建一串用连字符分隔的姓氏。有时空白会被夹在其中。我需要从最终结果中删除所有空格。

要处理的示例字符串:

安德森-里德-史密斯

它需要以(安德森之后没有空格)结束:

安德森-里德-史密斯

姓氏字符串位于字符串变量 LastName 中。

我正在使用正则表达式:

Regex.Replace(LastName, @"[\s+]", "");

结果是:

安德森-里德-史密斯。

我也试过:

Regex.Replace(LastName, @"\s+", "");

Regex.Replace(LastName, @"\s", "");

我究竟做错了什么?

4

8 回答 8

138

而不是RegEx用于Replace简单的东西:

LastName = LastName.Replace(" ", String.Empty);
于 2013-05-02T19:27:29.360 回答
64

Regex.Replace不修改它的第一个参数(回想一下,字符串在 .NET 中是不可变的)所以调用

Regex.Replace(LastName, @"\s+", "");

保持LastName字符串不变。你需要这样称呼它:

LastName = Regex.Replace(LastName, @"\s+", "");

您的所有三个正则表达式都会起作用。但是,第一个正则表达式也会删除所有加号字符,我想这是无意的。

于 2013-05-02T19:35:51.480 回答
14

不需要正则表达式。这也将删除标签、换行符等

var newstr = String.Join("",str.Where(c=>!char.IsWhiteSpace(c)));

空白字符: 0009 , 000a , 000b , 000c , 000d , 0020 , 0085 , 00a0 , 1680 , 180e , 2000 , 2001 , 2002 , 2003 , 2004 , 2005 , 2006 , 2007 , 2008 , 2009 , 200a , 2028 , 2029 , 202f , 205f , 3000 .

于 2013-05-02T19:27:03.720 回答
3

执行此操作的最快和通用方法(也将处理行终止符、制表符)。Regex 强大的工具并不真正需要解决这个问题,但 Regex 会降低性能。

                       new string
                           (stringToRemoveWhiteSpaces
                                .Where
                                (
                                    c => !char.IsWhiteSpace(c)
                                )
                                .ToArray<char>()
                           )

或者

                       new string
                           (stringToReplaceWhiteSpacesWithSpace
                                .Select
                                (
                                    c => char.IsWhiteSpace(c) ? ' ' : c
                                )
                                .ToArray<char>()
                           )
于 2017-07-24T11:51:18.433 回答
1

使用 REGEX,您可以删除字符串中的空格。

以下命名空间是必需的。

using System.Text.RegularExpressions;

句法:

Regex.Replace(text, @"\s", "")
于 2019-06-03T10:15:44.470 回答
0

您可以这样写,例如使用电话号码:

private static string GetFormattedPhoneNumber(string phoneNumber)
    => string.IsNullOrEmpty(phoneNumber) ? string.Empty 
    : Regex.Replace(phoneNumber, @"[+,\-,\(,\), \s+]*", string.Empty);

static void Main(string[] args)
    {
       Console.WriteLine(GetFormattedPhoneNumber("+375 (24) 55-333 "));
    }
/*
    Output: 3752455333
*/
于 2021-03-27T21:30:27.920 回答
-2

下面是将文件名中的空格替换为给定 URL 的代码,我们也可以使用 string.empty 而不是“~”来删除它

  if (!string.IsNullOrEmpty(url))
          {
           string origFileName = Path.GetFileName(url);
           string modiFileName = origFileName.Trim().Replace(" ", "~");
           url = url.Replace(origFileName , modiFileName );
          }
          return url;
于 2016-12-22T08:37:11.120 回答
-3

当您可以简单地使用 Trim() 方法时,为什么还要使用正则表达式

Text='<%# Eval("FieldDescription").ToString().Trim() %>'

或者

string test = "Testing    ";
test.Trim();
于 2017-02-07T14:12:47.313 回答