首页 > 解决方案 > 使用多个字符串与最终数组中的分隔符拆分字符串

问题描述

我一直在搜索,发现我可以使用多个字符串拆分一个字符串,例如“ x += 10 ”,所以我得到了结果{“x”,“10”},但我也希望在最终数组中包含分隔符,所以它将是{ "x", "+", "= ", "10" }使用分隔符 " + " 和 " = "。我使用的代码是var words = code.Split(Actions.available, StringSplitOptions.RemoveEmptyEntries);

标签: c#stringsplit

解决方案


使用正则表达式解析出文本。通过使用这些规则来创建文本匹配

  • 任何连续的数字
  • 任何连续的文本
  • 单独的分隔符,例如+or-=这是正则表达式中的一个集合
  • 忽略任何空格。

from 的结果Regex.Matches是标记化的输出:

在此处输入图像描述

代码

var input = "x += 10";
var pattern = @"(\w+|[-=+])";

Regex.Matches(input, pattern)
     .OfType<Match>()
     .Select(mt => mt.Value);

与正则表达式拆分交替

如果使用Regex.Split相同的模式,它会像我们之前指定的那样拆分所有内容,但也会由于其设计而在空格中添加。

在此处输入图像描述

但是为了补偿在结果列表中添加 linq 扩展调用,我们可以删除空格并获得相同的答案。

Regex.Split(input, @"(\w+|[-=+])")
     .Where(str => !string.IsNullOrWhiteSpace(str))

结果是{ "x", "+", "=", "10" }


推荐阅读