簡體   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