括号之间的简单正则表达式
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\))
这是一个如何执行此操作的示例:
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 秒的破解时间,我将永远感激不已。
再次感谢!
对不起,我是个菜鸟,但我已经在论坛上搜索了几个小时,但运气不佳,非常感谢,如果你能帮忙的话。
我正在使用 Tasker,我认为它使用了 java 风格的正则表达式。
我有随机数据例如:blah blah blah 6521 (3.2g) 345 (8g) 34 etc...
括号之间只有一个数字或一个数字后跟一个十进制数字,(
和 g)
始终不变,我只需要提取数字喜欢:
3.2
& 8
到 Tasker 将执行的数组中。
我认为应该有效的,但不能正常工作:
\d+.\d+|\d+
它生成所有数字,而不仅仅是 (
和 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
值。
如果需要,您还可以将列表转换为数组。
要匹配数字,请使用数字后跟可选的点后数字,然后是左括号:
(?<=\()\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 秒的破解时间,我将永远感激不已。
再次感谢!