正则表达式模式构造,以避免基于条件的选择性字符

时间:2013-02-18 12:18:09

标签: regex regex-lookarounds

我尝试了以下内容,预计会有o / p。

String valueIn = test-3-4-HH{3-4}-FF{38-99}
String[] valueInSplit = valueIn.split("-");

o/p array = [test, 3, 4, HH{3, 4}, FF{38, 99}]

在正则表达式中是否可以创建一个避免“{”和“}”之间的“ - ”的模式,因此预期的o / p应该是

o/p array = [test, 3, 4, HH{3-4}, FF{38-99}]

还有其他办法吗?请帮助。

2 个答案:

答案 0 :(得分:1)

假设只有1级括号{},并且括号可以正确打开和关闭,这是可能的。将此正则表达式与split函数:

一起使用
-(?![^{}]*})

As String literal:

"-(?![^{}]*})"

正则表达式检查-当前不在括号内,检查我们是否可以从字符串的当前位置找到一个右括号},因为它们之间的字符没有左括号{或右括号}

答案 1 :(得分:1)

您可以在拆分中使用否定前瞻来实现此目的。基本上你检查分隔符-后面是否有数字和一个右括号。

以下是我最终的结果:

-(?!\d+\})