[英]Regex to return the characters between square brackets (but not the brackets)
[英]Simple regex between brackets
抱歉,我是菜鳥,但我一直在論壇中搜索了數小時,但沒有運氣,如果能為您提供幫助,我們深表感謝。
我正在使用Tasker,我相信它使用Java風格的正則表達式。
我有隨機數據,例如: blah blah blah 6521 (3.2g) 345 (8g) 34 etc...
在方括號之間,只有一個數字或一個數字后跟一個十進制數字,而(
和g)
始終是常數,我只需要提取數字即可:
將Tasker將3.2
和8
放入其數組中。
我認為應該工作的東西,不能正常工作:
\\ 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.2
和8
\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.