如何将分隔符数组传递给 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
【讨论】:
非常感谢您的帮助。这似乎是我正在寻找的......有什么办法可以在最终结果中保留分隔符?目前fox
和 lazy
已从最终字符串中排除...以上是关于如何将分隔符数组传递给 Regex.Split 函数? [关闭]的主要内容,如果未能解决你的问题,请参考以下文章
C# 使用 Regex.Split 拆分大字符串。必须保留分隔符
设置对象数组中每个项目的属性(C#,Regex.Split())