繁体   English   中英

Java Regex删除字符串之间的文本,并在字符串中包括括号

[英]Java Regex Remove Text Between and Including Parenthesis from String

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

也许这不是一个优雅的解决方案,但似乎可行。

str.matches一直是我的难题。 我认为这意味着您通过它的正则表达式周围有一个“ ^”和“ $”。

由于您只关心替换问题字符串的任何出现,请尝试以下操作:

str = str.replaceAll("\\s+\\(\\$\\/(lb|kg)\\)", "");

有一个在线正则表达式测试工具 ,您也可以尝试查看表达式的工作方式。

编辑关于您的评论,可以将表达式更改为:

str = str.replaceAll("\\s+\\([^)]+\\)$", "");

这意味着,找到内容的任何部分,以一个或多个空格字符开头,后跟文字“(”,然后查找任何非“)”字符序列,最后寻找文字“)”的线。

这更符合您的期望吗?

此外,请注意有关“ matches()”与“ find()”的评论,因此对您的操作有何影响。

与大多数其他流行的应用程序语言不同,java中的matches()方法仅在正则表达式匹配整个字符串(而不是像perl,ruby,php,javascript等字符串的一部分 matches()时才返回true

匹配方括号输入(包括任何前导空格)的正则表达式为:

" *\\(.*?\\)"

和用于删除匹配项的代码是:

str = str.replaceAll(" *\\(.+?\\)", "");

这是一些测试代码:

String str = "foo (stuff) bar(whatever)";
str = str.replaceAll(" *\\(.+?\\)", "");
System.out.println(str);

输出:

"foo bar"

这段代码工作正常。

    String str = "Avg. Price ($/lb) Average Price ($/kg)";

    if (str.matches(".*\\(.+?\\)")) {
        str = str.replaceFirst("\\(.+?\\)", "");
    }
    System.out.println("str: "+str);

这将打印平均。 平均价格这是您需要的价格

注意:我在这里将replaceFirst替换replaceAll

字符串优先=“ ^(\\\\ w + \\\\。\\\\ s \\\\ w +)”;

这将打印出平均 价钱

字符串second =“(\\\\ w \\\\ s \\\\ w)”;

这将打印出平均价格

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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM