【问题标题】:How to pass array of delimiters to Regex.Split function? [closed]如何将分隔符数组传递给 Regex.Split 函数? [关闭]
【发布时间】:2019-12-17 13:12:30
【问题描述】:

如标题所示,如何将分隔符数组传递给 Regex.Split 函数?我需要用一个单词列表(也是字符串)来分割一个句子(字符串)。

【问题讨论】:

  • 您可以发布示例输入和示例字符串以进行拆分吗?也可能是您尝试过的代码
  • 查找交替。
  • String.Split 中可以传递一个分隔符数组;但是,不在Regex.Split 中。相反,您传递一个描述分割位置的搜索模式的正则表达式。它可以像string[] parts = Regex.Split(input, "a|b|c"); 一样简单,这会将 3 个字符“a”拆分为“c”。您可能应该使用String.Split

标签: c# arrays regex split


【解决方案1】:

您可以像这样从“分隔符”单词构建正则表达式模式:

var delim = new string[] {"fox", "lazy"};
var pattern =  @"(?:\s|^)(?:" + string.Join("|", delim.Select(Regex.Escape)) + @")(?:\s|$)";

\s 和开头和结尾的字符串锚确保分隔符包括它们周围的所有空白,并且避免使用Scunthorpe problem。使用Regex.Espace 可确保带有正则表达式元字符的分隔符不会破坏您的代码。

生成的模式如下所示:

(?:\s|^)(?:fox|lazy)(?:\s|$)

Demo 1

如果您想在标记之间保留分隔词,请更改正则表达式以在前瞻/后视中使用它们:

var delimGroup = "(?:"+string.Join("|", delim.Select(Regex.Escape))+")";
var pattern =  @"\s(?="+delimGroup+")|(?<="+delimGroup+@")\s";

Demo 2

【讨论】:

  • 非常感谢您的帮助。这似乎是我正在寻找的......有什么办法可以在最终结果中保留分隔符?目前 foxlazy 已从最终字符串中排除...
猜你喜欢
  • 2016-02-19
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2016-03-13
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多