繁体   English   中英

正则表达式分裂围绕卷曲括号

[英]Regex Split Around Curly Braces

我有一个字符串:

"abc{d}efg{hi}{jk}lm{n}"

我希望它分为:

"abc","{d}","efg","{hi}","{jk}","lm","{n}"

我使用了这种模式[{}] ,结果是"abc","d","efg","hi","","jk","lm","n"

我如何保留'{''}' 我如何删除'}''{'之间的空""

使用全部匹配而不是拆分

请记住, Match All和Split是同一枚硬币的两面

使用这个正则表达式:

{[^}]*}|[^{}]+

查看DEMO中的匹配项。

要查看匹配项:

var myRegex = new Regex("{[^}]*}|[^{}]+");
Match matchResult = myRegex.Match(yourString);
while (matchResult.Success) {
    Console.WriteLine(matchResult.Value);
    matchResult = matchResult.NextMatch();
} 

说明

  • 在交替的左侧| {[^}]*}匹配{content in braces}
  • 在右侧, [^{}]+匹配任何非curlies的字符

使用外观断言的组合:

String s = @"abc{d}efg{hi}{jk}lm{n}";
String[] parts = Regex.Split(s, @"(?<=^|})|(?={)");
foreach (string value in parts)
         Console.WriteLine(value);

产量

abc
{d}
efg
{hi}
{jk}
lm
{n}

未经测试但希望这将适用于您的分裂:

(?={)|(?<=})

请尝试以下方法:

解析字符串,直到你到达一个左大括号。 输出子串直到该位置。 在开口支撑之后解析子串,直到找到闭合支撑。 使用大括号输出大括号之间的子串。 继续此算法,直到字符串结束。

这是一个简单的方法

string to_split = "abc{d}efg{hi}{jk}lm{n}";
            var splited = Regex.Matches(to_split, @"\{[\w]*\}|[\w]*");
            foreach (Match match in splited)
            {
                Console.WriteLine(match.ToString());
            }

暂无
暂无

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

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