我一直在尝试使用regex在字符串中查找某些整数(我不完全确定它是什么,有人能给我介绍一些东西来了解它吗?),但是有一些问题。我在字符串中查找第一个整数并将该整数值设置为变量,但在查找第二个整数时遇到了问题。这是我目前的代码:
for (int x = 0; x < list.length; x++) {
current = list[x];
Matcher first = Pattern.compile("\\d+").matcher(current);
first.find();
min = Integer.valueOf(first.group());
Matcher second = Pattern.compile("^\\D*\\d+\\D+(\\d+)").matcher(current);
second.find();
max = Integer.valueOf(second.group());
System.out.println("min: " + min + " max: " + max);
}
在这种情况下,假设字符串是“1鳄梨酱36”,我希望它设置 min
变量的值为1 max
一个36的变量。我该怎么做?所有出现的都是错误,我从第二个匹配器的部分中假设。
请让我知道,如果你可以帮助查询或如果我应该添加更多的信息-提前感谢!
附笔 list
是一个字符串数组,对于每个字符串,每次都要将min和max重置为字符串中的整数。
3条答案
按热度按时间9rygscc11#
打电话
group()
查找组0(即整个匹配项),但您想要的数字在组1中捕获,因此您应该执行以下操作:你其实不需要第二个正则表达式来找到第二个数字。只要让第一个匹配者再匹配一次。它将找到第二个数字:
一个更安全的方法是在调用之前检查匹配程序是否真的发现了什么
group
:6tqwzwtp2#
如果您想使用一行正则表达式方法,那么使用
String#replaceAll
使用此正则表达式模式:这将捕获第一个捕获组中输入的第二个数字。示例脚本:
注意:如果输入中没有至少两个独立的数字,那么上面的替换实际上只返回输入。在这种情况下,如果您想报告不匹配,您应该首先使用
String#matches
.83qze16e3#
我认为你需要继续寻找下一个项目,只要字符串包含它,你想处理。如其他答案所示,如果您明确地寻找第二个数字,那么您可以使用
regex
或使用second.group(1)
.如果您希望在字符串中查找最小值和最大值,请看下面的操作:
应该打印出来