[英]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.