我正在尝试匹配{...}所包围的子字符串,其中内部内容是一组n元组,每个元组用逗号分隔(示例如下所示)。正则表达式模式获取预期结果,但不完全表达所需的完整规则。
规则
{...}
括起来的子字符串,但没有嵌套的子括号,例如{ ... {..}}
{(a,b)(t,s),(u,v)}
不在匹配项中,因为它在(a,b)
和(t,s)
之间缺少逗号。 (a,b, test element)
没问题,但不是(a,b, {ab})
但正则表达式模式使用不太合适。
例如,如果我在{(a,b)(t,s),(u,v)}
移动逗号以使其{(a,b),(t,s)(u,v)}
,则此元素将显示为匹配,即使现在元组(t,s)
和{ {1}}未以逗号分隔。
有效结果
{(a,b,c),(d,e,f),(r,s和q,t),(u,v,y)}
{(A,B),(C,d,E)}
{(A,B),(C + 1,d)}
(u,v)
答案 0 :(得分:0)
你的表情有更多问题。以下内容也会显示为匹配项,我不认为这是您想要的内容:
{(a,b),(c,d)}
{(A,B),,(C,d,E)}
{(一,ABCD),(ABCD,B)}
试试这个:
Regex oRegex = new Regex(@"{\(\w(,\w)*\)(,\(\w(,\w)*\))*}");
<强>更新强> 如果n元组的元素可以是任何不包含逗号或大括号或括号的文本,那么你可以试试这个:
Regex oRegex = new Regex(@"{\([^,(){}]+(,[^,(){}]+)*\)(,\([^,(){}]+(,[^,(){}]+)*\))*}");
而且,如果元组之间逗号周围的空格很好(例如{(a,b), (c,d)}
),那么你可以使用它:
Regex oRegex = new Regex(@"{\([^,(){}]+(,[^,(){}]+)*\)(\s*,\s*\([^,(){}]+(,[^,(){}]+)*\))*}");
然而,这似乎比你想象的要复杂得多。我建议您尝试使用解析器,如Matthew Lock在评论中所建议的那样。