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

本文关键字:字符串 空格 拆分 | 更新日期: 2023-09-27 17:50:49

我有一个这样的字符串

(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);
}

IDEe演示

故障:

'((                     # 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);

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