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