Java Regex从字符串

时间:2015-09-09 04:43:48

标签: java regex

我是用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 (")"))

也许不是一个优雅的解决方案,但似乎有效。

3 个答案:

答案 0 :(得分:2)

对我来说,str.matches一直存在问题。我认为这意味着围绕你传递的正则表达式的'^'和'$'。

由于您只关心替换任何有问题的字符串 - 请尝试以下方法:

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 ;;

这将打印出平均价格

希望这个简单的答案有帮助