正则表达式在大括号周围分割

本文关键字:周围 分割 正则表达式 | 更新日期: 2023-09-27 18:15:40

我有一个字符串:

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

我想把它分成:

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

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

我如何保持'{''}'在那里?我如何删除'}''{'之间的空"" ?

正则表达式在大括号周围分割

使用Match All代替Split

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

使用这个正则表达式:

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

查看演示中的匹配项。

查看匹配项:

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

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

尚未测试,但希望这将在您的分割工作:

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

使用look - around断言的组合:

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