【发布时间】:2018-05-16 10:13:11
【问题描述】:
获取包含特定字符的最里面的一组括号的正则表达式是什么? '|'在这种情况下?
一些例子和一个(c#)测试方法:
string[] tests = {
"x () y", "",
"x (a) y", "",
"x (a.b()) y", "",
"x ((a).b() | (b).c()) y", "(a).b() | (b).c()",
"x (a|b) y", "a|b",
"x ((a|b) | c)", "a|b",
"x (a|b|c) y", "a|b|c",
"x (a|a.b()|c) y", "a|a.b()|c",
"x (a.b()|b.c()) y", "a.b()|b.c()",
"x (a.b()|b.c()|c) y", "a.b()|b.c()|c",
"x (a|b.c()|c.d()) y", "a|b.c()|c.d()",
"x (a|(b.c()|d)) y", "b.c()|d",
"x (a|a.b(a)|c) y", "a|a.b(a)|c"
};
for (int i = 0; i < tests.Length; i+=2)
{
var match = re.Match(tests[i]);
var result = match.Groups[1].Value;
Assert.That(result, Is.EqualTo(tests[i + 1]));
}
【问题讨论】:
-
你可能需要 C# 代码,而不是正则表达式。
-
应该可以使用(或什至没有)平衡组
-
你想要最里面的组,不知道如何找到它,如果两个组并排,它会变得很复杂。最好以编程方式解决它。
-
正确,很好@wiktor-stribizew