括号之间的简单正则表达式

Simple regex between brackets

对不起,我是个菜鸟,但我已经在论坛上搜索了几个小时,但运气不佳,非常感谢,如果你能帮忙的话。

我正在使用 Tasker,我认为它使用了 java 风格的正则表达式。

我有随机数据例如:blah blah blah 6521 (3.2g) 345 (8g) 34 etc...

括号之间只有一个数字或一个数字后跟一个十进制数字,(g) 始终不变,我只需要提取数字喜欢:

3.2 & 8 到 Tasker 将执行的数组中。

我认为应该有效的,但不能正常工作:

\d+.\d+|\d+

它生成所有数字,而不仅仅是 (g)

之间的数字

有任何指点吗?

非常感谢大家!

编辑:打字错误

请尝试以下模式: (?<=\()\d+\.?\d?(?=g\))

Online Demo

这是一个如何执行此操作的示例:

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 值。 如果需要,您还可以将列表转换为数组。

要匹配数字,请使用数字后跟可选的点后数字,然后是左括号:

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

表达式 (?<=\() 向后看 并且意味着前面的字符必须是 (,但不会将其作为匹配。

类似地,(?=g\)) 断言接下来的字符是 g)。您可能不需要 (?=g\)),但它会加强匹配。

到目前为止,除了我尝试过的数百个之外,此页面上所有非常好的建议都从数据字符串中生成了所有数字 6521 3.2 345 8 34,而不仅仅是 [=12= 之间的数字] ] 和 g) 这只会导致 3.2 & 8

\d+.\d+|\d+

\d+(\.\d)?

\d+(\.\d+)?

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

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

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

也许不幸的是这是不可能的,或者也许,虽然我一直认为它非常先进,但塔斯克不喜欢它。

如果任何 Regex 向导愿意给它 30 秒的破解时间,我将永远感激不已。

再次感谢!