如何将分隔符数组传递给 Regex.Split 函数? [关闭]

Posted

技术标签:

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

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

【问题讨论】:

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

以上是关于如何将分隔符数组传递给 Regex.Split 函数? [关闭]的主要内容,如果未能解决你的问题,请参考以下文章

C# 使用 Regex.Split 拆分大字符串。必须保留分隔符

如何保留 Regex.Split 的分隔符?

设置对象数组中每个项目的属性(C#,Regex.Split())

Java string.split 与 C# Regex.split - 限制为一定数量的字段

我如何将数组传递给执行存储命令?

将多维数组传递给函数 C