簡體   English   中英

意外的正則表達式結果

[英]Unexpected Regex Results

我已經看到了幾個關於如何在分隔符之間檢索和刪除字符串的示例。 但是,我創建了一個非常簡單的測試用例,並且根據各種示例得到了錯誤的輸出。 為什么我要回到我想用作搜索源的字符串而不是我正在搜索的字符串?

String temp = "56.0 F (13.3C)";
String exp = "((^))";
String p = temp.replace(exp, "");
System.out.println("p=" + p); 

我得到字符串56.0F (13.3C)作為我的輸出。

我期待得到56.0F

我也嘗試使用模式匹配器:

Pattern pattern = Pattern.compile(exp);
Matcher matcher = pattern.matcher(temp);
if (matcher.find()) {
    System.out.println(matcher.groupCount());
    for (int i=0; i<=matcher.groupCount(); i++) {
        String groupStr = matcher.group(i);
        System.out.println(groupStr);
    }
}

2是打印到控制台的內容

關於我做錯了什么的任何想法? 我一直在看這個問題幾個小時。 謝謝!

它返回字符串,因為它無法進行任何替換。

嘗試使用\\(.*?\\)\\([^)]*\\)來匹配括號括起的字符串部分。

如果你希望它可以選擇吃掉周圍的空格,那么在正則表達式的任一側放置\\s* ,或者對結果進行修剪。

您的第一個示例打印原始字符串,因為replace()方法不執行正則表達式替換。 它試圖替換文字字符串((^)) ,當然這不存在。

但是,如果您使用了replaceAll()replaceFirst() ,則會獲得相同的結果。 正則表達式中的^是零寬度斷言; 它不消耗任何字符,它只是將匹配錨定到字符串的開頭。 我期望從你的第二個例子看到的結果是

> 56.0F (13.3C)
>
>

換句話說,整個字符串( group(0) )和兩個空字符串( group(1)group(2) )。 那是因為兩組parens被解釋為捕獲組。 如果要匹配(文字)括號及其內容,可以使用:

String exp = "\\(.*?\\)";

......甚至更好:

String exp = "\\([^()]*\\)";

根本不需要使用捕獲組。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM