我正在尝试查找/确定字符串是否包含不包含在圆括号“()”中的字符“-”。
我已经尝试过正则表达式[^\(]*-[^\)]*
,
但它不起作用。
例子:
100 - 200 mg
->应该匹配,因为“-”不在圆括号内。 100 (+/-) units
->不应该匹配最佳答案
您必须使用正则表达式吗?您可以尝试仅遍历字符串并跟踪范围,如下所示:
public boolean HasScopedDash(String str)
{
int scope = 0;
boolean foundInScope = false;
for (int i = 0; i < str.length(); i++)
{
char c = str.charAt(i);
if (c == '(')
scope++;
else if (c == '-')
foundInScope = scope != 0;
else if (c == ')' && scope > 0)
{
if (foundInScope)
return true;
scope--;
}
}
return false;
}
编辑:如评论中所述,可能希望排除破折号在圆括号后但没有圆括号的情况。 (即“abc(2-xyz”)上面的代码对此进行了解释。