我有一个包含人名及其城市名称的字符串
> John ((Rio de Janeiro); Brazil); Peter Edmund Hilary (New Delhi, (India))
我想将它们分成
> John ((Rio de Janeiro); Brazil)
> Peter Edmund Hilary (New Delhi, (India))
基本上,用分号分隔作者,但如果它们在括号内,则忽略分号。
是否有正则表达式可以解决这个问题?
答案 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();