从字符串中提取多个空格

5

我希望获得长度大于1个空格的空白。

以下代码可以获取每个字母之间的null字符和空白。然而,我只想提取在cd之间的两个空白字符串以及在fg之间的三个空白字符串。

string b = "ab c  def   gh";
List<string> c = Regex.Split(b, @"[^\s]").ToList();

更新: 以下方法有效,但我正在寻找更加优雅的实现方式:

c.RemoveAll(x => x == "" || x == " ");

期望的结果是一个包含 " "" "List<string>
5个回答

5
如果您想要一个“List<String>”作为结果,您可以执行这个“Linq”查询。
string b = "ab c  def   gh";

List<String> c = Regex
  .Matches(b, @"\s{2,}")
  .OfType<Match>()
  .Select(match => match.Value)
  .ToList();

3
这将为您提供所需的列表。
string b = "ab c  def   gh";
var regex = new Regex(@"\s\s+");
var result = new List<string>();
foreach (Match m in regex.Matches(b))
    result.Add(m.Value);

2
不要使用正则表达式进行拆分,尝试使用Regex.Matches来获取所有与您的模式匹配的项 - 在这种情况下,我使用了一个模式来匹配两个或更多的空格字符,我认为这就是您想要的?
    var matchValues = Regex.Matches("ab c   def    gh", "\\s\\s+")
        .OfType<Match>().Select(m => m.Value).ToList();

令人烦恼的是,由Regex.Matches返回的MatchCollection不是IEnumerable<Match>,因此需要在LINQ表达式中使用OfType<>

2
如果你只对这些空格感兴趣,可以使用以下方法:
foreach(var match in Regex.Matches(b, @"\s\s+")) {
    // ... do something with match
}

这确保您至少匹配2个空格。


1
您可以使用以下单行代码:
var list =Regex.Matches(value,@"[ ]{2,}").Cast<Match>().Select(match => match.Value).ToList();

希望它能帮到你。

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