簡體   English   中英

括號之間的簡單正則表達式

[英]Simple regex between brackets

抱歉,我是菜鳥,但我一直在論壇中搜索了數小時,但沒有運氣,如果能為您提供幫助,我們深表感謝。

我正在使用Tasker,我相信它使用Java風格的正則表達式。

我有隨機數據,例如: blah blah blah 6521 (3.2g) 345 (8g) 34 etc...

在方括號之間,只有一個數字或一個數字后跟一個十進制數字,而(g)始終是常數,我只需要提取數字即可:

將Tasker將3.28放入其數組中。

我認為應該工作的東西,不能正常工作:

\\ d + \\ d + | \\ d +

它會產生所有數字,而不僅僅是(g)之間的數字

任何指針有人嗎?

非常感謝大家!

編輯:錯別字

要匹配數字,請使用可選的點-后-數字后跟的數字,並在其前加一個空心括號:

(?<=\()\d+(\.\d+)?(?=g\))

表達式(?<=\\() 在后面 ,表示前面的字符必須為( ,但不會在匹配中使用它。

同樣, (?=g\\))斷言下一個字符為g) 您可能不需要(?=g\\)) ,但可以使比賽更加緊張。

請嘗試以下模式: (?<=\\()\\d+\\.?\\d?(?=g\\))

在線演示

以下是如何執行此操作的示例:

import java.util.regex.Matcher;
import java.util.regex.Pattern;
import java.util.*; 

public class YourClass {
    public static void main(String args[]) {
        /* Create a list to store the result */
        List<String> allMatches = new ArrayList<String>();
        Matcher m = Pattern.compile("(\\d+).(\\d+)|(\\d+)").matcher("(3.2g) (8g)");

        /* Add the results to list */
        while (m.find()) {
           allMatches.add(m.group());
        }

        /* Print out the result */
        for(int i=0; i< allMatches.size(); i++) {
            System.out.print(allMatches.get(i)+" ");
        }

    }
}

您可以將(3.2g) (8g)替換為您的String值。 如果需要,還可以將列表轉換為數組。

到目前為止,除了我嘗試的數百種方法外,此頁面上的所有非常好的建議都從數據字符串中生成了所有數字6521 3.2 345 8 34 ,而不僅僅是(g)之間的數字,它們只會導致3.28

\d+.\d+|\d+

\d+(\.\d)?

\d+(\.\d+)?

\d+\.\d+|\d+

("(\\d+).(\\d+)|(\\d+)")

(\\d+).(\\d+)|(\\d+)

也許不幸的是不可能,或者也許雖然我一直認為它非常先進,但塔斯克不喜歡它。

如果有任何Regex向導願意給它30秒的破解時間,我將不勝感激。

再次感謝!

暫無
暫無

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

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