繁体   English   中英

在空格上分割字符串,忽略括号

[英]Split string on whitespace ignoring parenthesis

我有这样的字符串

(ed) (Karlsruhe Univ. (TH) (Germany, F.R.))

我需要将它分成两个这样

ed
Karlsruhe Univ. (TH) (Germany, F.R.)

基本上,忽略括号内的空格和括号

是否可以使用正则表达式来实现这一目标?

如果可以有更多的括号,则最好使用平衡组:

string text = "(ed) (Karlsruhe Univ. (TH) (Germany, F.R.))";
var charSetOccurences = new Regex(@"\(((?:[^()]|(?<o>\()|(?<-o>\)))+(?(o)(?!)))\)");
var charSetMatches = charSetOccurences.Matches(text);
foreach (Match match in charSetMatches)
{
    Console.WriteLine(match.Groups[1].Value);
}

ideone演示

分解:

\((                     # First '(' and begin capture
    (?:                 
    [^()]               # Match all non-parens
    |
    (?<o> \( )          # Match '(', and capture into 'o'
    |
    (?<-o> \) )         # Match ')', and delete the 'o' capture
    )+
    (?(o)(?!))          # Fails if 'o' stack isn't empty

)\)                     # Close capture and last opening brace
\((.*?)\)\s*\((.*)\)

您将在两个匹配组\\ 1和\\ 2中获得两个值

演示在这里: http : //regex101.com/r/rP5kG2

就是您搜索并替换为\\1\\n\\2 ,这似乎也正是您所需要的

string str = "(ed) (Karlsruhe Univ. (TH) (Germany, F.R.))";
Regex re = new Regex(@"\((.*?)\)\s*\((.*)\)");

Match match = re.Match(str);

一般来说,没有
您不能在正则表达式中描述递归模式。 (由于不可能用有限的自动机识别它。)

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM