我正在尝试查找/确定字符串是否包含未括在圆括号“()”中的字符“-”。
我尝试过正则表达式
[^\(]*-[^\)]*
,
但它不起作用。
示例:
100 - 200 mg
-> 应匹配,因为“-”未括在圆括号中。100 (+/-) 单位
-> 不应匹配
最佳答案
你必须使用正则表达式吗?您可以尝试迭代字符串并跟踪范围,如下所示:
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”)上面编辑的代码说明了这一点。
关于java - 查找字符串中不在圆括号 "-"内的破折号 "()",我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/56139609/