这是我正在使用的字符串的示例
{Hi|Hello|Holla} {James{ey|o|ing}|Bob{bie|bey}}
我需要一个正则表达式来提取 {} 示例之间的值:
Hi|Hello|Holla
James{ey|o|ing}
Bob{bie|bey}
原始字符串称为 Spintax。我的程序将选择一个包含在每个 {} 块中的随机值。嵌套的 {} 块可以很深。
正则表达式需要提取 {} 之间的值,忽略任何嵌套的 {} 块。然后,再次通过管道 (|) 拆分值,忽略任何嵌套的 {} 块,这样嵌套的 {} 块中的管道就不会被触及。
那有意义吗?
我确实使用 String 方法实现了部分解决方案,但是当通过管道拆分时,它也会拆分嵌套 {} 内的管道,这是意料之中的,但我无法找到忽略嵌套 {} 的方法
public String spintaxParse(String s)
{
// TODO: Implement logic to check for {} within String.
if (s.Contains('{'))
{
int firstOccuranceOfOpenBrace = s.IndexOf('{');
while (s[firstOccuranceOfOpenBrace + 1].Equals('{'))
firstOccuranceOfOpenBrace++;
int firstOccuranceOfClosingBrace = s.Substring(firstOccuranceOfOpenBrace).IndexOf('}');
String spintaxBlock = s.Substring(firstOccuranceOfOpenBrace, firstOccuranceOfClosingBrace + 1);
String[] items = spintaxBlock.Substring(1, spintaxBlock.Length - 2).Split('|');
Random rand = new Random();
s = s.Replace(spintaxBlock, items[rand.Next(items.Length)]);
return spintaxParse(s);
}
else
{
return s;
}
}