这里有一个有趣的问题供大家考虑:
我正在尝试解析和标记由字符分隔的字符串,"/"
但前提是不在括号之间。
例如:
根/分支1/分支2/叶
应标记为:"Root"
, "Branch1"
, "Branch2"
,"leaf"
Root/Branch1(subbranch1/subbranch2)/叶子
应标记为:"Root"
, "Branch1(subbranch1,subbranch2)"
,"leaf"
根(branch1/branch2)文本(branch3/branch4)文本/根(branch1/branch2)/叶
应标记为:"Root(branch1/branch2) text(branch3/branch4)"
, "Root(branch1/branch2)"
, "leaf"
.
我想出了以下表达式,它适用于除 ONE 之外的所有情况!
([^/()]*\((?<=\().*(?=\))\)[^/()]*)|([^/()]+)
唯一不起作用的情况是以下测试条件:
根(branch1/branch2)/SubRoot/SubRoot(branch3/branch4)/叶子
这应该被标记为:"Root(branch1/branch2)"
, "SubRoot"
, "SubRoot(branch3/branch4)"
,"Leaf"
相反,我得到的结果只包含一个与整行匹配的组,因此它根本没有对其进行标记:
“根(分支 1/分支 2)/子根/子根(分支 3/分支 4)/叶”
这里发生的事情是,因为正则表达式是贪婪的,它会将最左边的左括号"("
与最后一个右括号匹配,")"
而不是仅仅知道在其适当的分隔符处停止。
你们那里的任何正则表达式专家都可以帮助我弄清楚如何在我现有的表达式中添加一个小的正则表达式片段来处理这个额外的情况?
Root(branch1/branch2) 测试(branch3/branch4)/SubRoot/SubRoot(branch5/branch6)/Leaf
应该被标记为组:
“根(分支 1/分支 2)测试(分支 3/分支 4)” “子根” “子根(分支 5/分支 6)” “叶子”