我需要从外部括号中获取文本 所以从像这样的文本内部块数量未知:
Block1 {{text1} {text2} ... {text n}}
得到结果:
{的text1}
和
{text2} .... {text n}
有一种简单的方法可以做到吗?谢谢!
答案 0 :(得分:1)
您可以使用正则表达式。
String pattern = @"(Block[0-9]+){({[^}]+})*}";
String text = @"Block1{{text1}{text2}{text3}{text4}{text5}{text6}}Block2{{text1}{text2}{text3}}";
foreach(Match match in Regex.Matches(text, pattern))
{
Console.Out.WriteLine("---------");
Console.Out.WriteLine("Match: `" + match.ToString() + "`");
foreach(Group grp in match.Groups)
{
Console.Out.WriteLine(" Group: `" + grp.Value + "`");
foreach(Capture cpt in grp.Captures)
{
Console.Out.WriteLine(" Capture: `" + cpt.Value + "`");
}
}
}
分解正则表达式模式:
捕获文字Block
和零个或多个数字:
(Block[0-9]+)
处理文字{
:
{
捕获文字{
,一个或多个除}
以外的任何内容的零次或多次重复,然后是文字}
:
({[^}]+})*
处理文字}
:
}
编辑2 :根据评论中的对话,原始问题旨在扩大范围。我认为以下答案适用于最初提出的具体案例,但上面的答案是通用的。
您可以使用正则表达式。
String pattern = @"{({[^}]+})({[^}]+})}";
Match match = Regex.Match(text, pattern);
Console.Out.WriteLine("---------");
Console.Out.WriteLine("Match: `" + match.ToString() + "`");
if (match.Groups.Count == 3)
{
Console.Out.WriteLine(" Group 1: ``" + match.Groups[1].Value);
Console.Out.WriteLine(" Group 2: ``" + match.Groups[2].Value);
}
打破这个表达:
匹配一个开口花括号:
{
从一个开口花括号中创建一个组,一个或多个不一个结束大括号的字符,以及一个结束大括号。
({[^}]+})
从一个开口花括号中创建一个组,一个或多个不一个结束大括号的字符,以及一个结束大括号。
({[^}]+})
匹配一个结束大括号:
}
编辑:我犯了一个错误,我已经用第一个正则表达式纠正了;它产生了text1
而不是{text1}
,而text2
也是如此。
答案 1 :(得分:-3)
尝试 索引 方法 。 (例如:Block1 [0],Block1 [1])
Block1[0]