您好我使用通用表达式获取字符串中的第一个数字:
import java.util.regex.Matcher;
import java.util.regex.Pattern;
public class HelloWorld{
public static void main(String []args){
String string = "hellow this is \"width: 32%\" and i know";
Pattern pattern = Pattern.compile("width: (\\d+?)");
Matcher matcher = pattern.matcher(string);
matcher.find();
System.out.println(Integer.parseInt(matcher.group(1)));
}
}
这是一个简化版本。这打印出数字3,但我想打印出32,我做错了什么?有人能指出我正确的方向, 感谢。
答案 0 :(得分:3)
删除?
,因为?
之后的+
或*
会进行非贪婪的匹配。所以一旦找到一个匹配就停止匹配。 \\d+?
匹配第一个数字并停止匹配下一个数字,因为它已找到匹配项。
Pattern pattern = Pattern.compile("width: (\\d+)");
答案 1 :(得分:2)
(\\ d +?)你懒散的想要数字,所以它会花费更少的数字。
您可以使用(\\ d +)使其变得贪婪。
答案 2 :(得分:-2)
使用的正确模式是(查找第一个数字百分比)
<script></script>
这完全可以获得%之前的数字,希望这对其他人也有帮助。