我是用Java编程的,我有几个看起来类似的字符串:
"Avg. Price ($/lb)"
"Average Price ($/kg)"
我想从两个字符串中移除($/lb)
和($/kg)
并留下
"Avg. Price"
"Average Price".
我的代码检查String str 变量是否与上面的一个字符串匹配,如果匹配,则将包含括号的内部文本替换为空字符串:
if(str.matches(".*\\(.+?\\)")){
str = str.replaceFirst("\\(.+?\\)", "");
}
当我将str.matches更改为str.contains时(" $ / lb");作为测试,删除了想要的子字符串,这使我相信if语句有问题。关于我做错了什么的任何帮助?谢谢。
更新 我将if语句更改为:
if(str.contains("(") && str.contains (")"))
也许不是一个优雅的解决方案,但似乎有效。
答案 0 :(得分:2)
由于您只关心替换任何有问题的字符串 - 请尝试以下方法:
str = str.replaceAll("\\s+\\([^)]+\\)$", "");
还有一个online regex testing tool你也可以尝试看看你的表达方式是如何运作的。
编辑关于您的评论,表达式可以更改为:
{{1}}
这意味着,找到以一个或多个空格字符开头的任何内容部分,然后是文字'(',然后查找任何非''''字符序列,后跟文字')'在最后一行。
这是否更符合您的期望?
此外,请注意关于'matches()'与'find()'的评论,这对你来说影响操作非常重要。
答案 1 :(得分:1)
与大多数其他流行的应用程序语言不同,如果正则表达式匹配整个字符串(不是 part ),则java中的matches()
方法仅返回true
字符串,如perl,ruby,php,javascript等)。
匹配括号输入的正则表达式,包括任何前导空格,是:
" *\\(.*?\\)"
以及用于删除匹配的代码是:
str = str.replaceAll(" *\\(.+?\\)", "");
这是一些测试代码:
String str = "foo (stuff) bar(whatever)";
str = str.replaceAll(" *\\(.+?\\)", "");
System.out.println(str);
输出:
"foo bar"
答案 2 :(得分:0)
字符串优先=" ^(\\ w + \\。\\ s \\ w +)&#34 ;;
这将打印出Avg。价
String second ="(\\ w \\ s \\ w)&#34 ;;
这将打印出平均价格
希望这个简单的答案有帮助