我正在尝试创建一个正则表达式,它从字符串中提取所有连续的数字(包括单个数字)
下面的正则表达式无法提取2个连续数字。
public static void main(String args[]) {
print(checkRegex("2G18R"));
}
private static void print(String arr []) {
for(String s : arr) {
System.out.println(s);
}
System.out.println("-----------------------------");
}
private static String [] checkRegex(String str) {
System.out.println("original string " + str);
Pattern pattern = Pattern.compile(".*(\\d{4})|(\\d{3})|(\\d{2})|(\\d+).*");
Matcher matcher = pattern.matcher(str);
if(matcher.find()) {
return new String [] {
matcher.group(1),
matcher.group(2),
matcher.group(3),
matcher.group(4)
};
}
return new String [] {};
}
预期的输出是matcher.group(3)应该返回18,但它返回空值。
总体预期输出为[2,18]
2条答案
按热度按时间hk8txs481#
模式
".*(\\d{4})|(\\d{3})|(\\d{2})|(\\d+).*"
将匹配类似"abc1234|567|89|0efg"
的内容我想你需要这样的模式:
"(\\d{1,4})"
和输出:
g52tjvyc2#
不清楚你是只需要数字数组还是要使用正则表达式。这里有一个匹配的替代方法。只要使用split。
\\D+
拆分字符串您也可以采用流方法过滤掉有问题的字符串。
都打印以下内容