java - 如何在java中只找到精确的模式匹配?

标签 java regex string regex-lookarounds regex-group

字符串“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/

相关文章:

iphone - 在Objective-C中替换字符串中的多个字符?

Python - 将数组中的字符串转换为日期

java - 如果不会重新分配,我是否应该将所有形式参数设置为final?

python - 匹配整行的正则表达式

java - 检查字符串是否以某种模式结尾

c# - 除去除数字外的所有内容的正则表达式是什么?

java - 将字符串从 servlet 传递到 .jsp

java - 同步读取(即 "receive"而不是监听器)

java - 警告 : Action does not match allowed action names pattern, 清理它

java - 如何使这段代码不打印负值?