将格式化的字符串拆分为字符串列表

时间:2014-03-18 15:59:47

标签: c# regex

我有一个包含人名及其城市名称的字符串

>     John ((Rio de Janeiro); Brazil); Peter Edmund Hilary (New Delhi, (India))

我想将它们分成

>     John ((Rio de Janeiro); Brazil)
>     Peter Edmund Hilary (New Delhi, (India))

基本上,用分号分隔作者,但如果它们在括号内,则忽略分号。

是否有正则表达式可以解决这个问题?

1 个答案:

答案 0 :(得分:1)

如果您确定;将始终跟随),并且括号内没有嵌套);等模式,那么这将有效:

Regex.Split(input, @"(?<=\));\s*")

鉴于您的更新,我建议采用不同的策略。正则表达式不太适合解析这种递归结构(嵌套括号)。但是,您可以使用balancing groups递归地解析括号,如下所示:

var input = "John ((Rio de Janeiro); Brazil); Peter Edmund Hilary (New Delhi, (India))";
var matches = Regex.Matches(input, @"([^;()\s]+\s*(\(((?<p>\()|(?<-p>\))|[^()]*)+\))?\s*)+");
var array = matches.Cast<Match>().Select(x => x.Value).ToArray();