字符串“description”同时具有 5 位和 7 位子字符串。我只想将 5digit、7digit 分别与 5digit、7digit 匹配。但是,5 位子字符串会提取整个 5 位数字字符串和 7 位数字的前 5 位数字。
Pattern 5digitPattern = Pattern.compile("([0-9]{5})");
Pattern 7digitPattern = Pattern.compile("([0-9]{7})");
Matcher 5digitMatcher = 5digitPattern.matcher(description);
Matcher 7digitMatcher = 7digitPattern.matcher(description);
if (5digitMatcher.find()) {
for (int i = 0; i < 5digitMatcher.groupCount(); i++) {
System.out.print("\t" + 5digitMatcher.group(i));
}
}
if (7digitMatcher.find()) {
for (int i = 0; i < 7digitMatcher.groupCount(); i++) {
System.out.print("\t" + 7digitMatcher.group(i));
}
}
请帮我将 5 位、7 位分别与 5 位、7 位进行匹配。
最佳答案
使用字边界:
Pattern 5digitPattern = Pattern.compile("\\b([0-9]{5})\\b");
Pattern 7digitPattern = Pattern.compile("\\b([0-9]{7})\\b");
根据评论,如果要匹配abc12345def
中的数字,请使用否定查找:
Pattern 5digitPattern = Pattern.compile("(?<![0-9])([0-9]{5})(?![0-9])");
Pattern 7digitPattern = Pattern.compile("(?<![0-9])([0-9]{7})(?![0-9])");
关于java - 如何在java中只找到精确的模式匹配?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/56296534/