【问题标题】:How to find only the exact pattern matches in java?如何在java中只找到精确的模式匹配?
【发布时间】:2019-05-24 16:38:13
【问题描述】:

字符串“描述”有 5 位和 7 位的子串。我只想分别将 5digit、7digit 与 5digit、7digit 匹配。但是,5digit substring 提取整个 5 digit 字符串和 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));
                }
            }

请帮我分别匹配 5digit、7digit 和 5digit、7digit。

【问题讨论】:

  • 我不确定输入和预期结果是什么,尤其是7digit with 5digit。您能否在问题中包含一个或多个示例?

标签: java regex string regex-lookarounds regex-group


【解决方案1】:

使用单词边界:

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])");

【讨论】:

  • 你不能在这里使用单词边界,因为5digitPattern 将不会匹配abc12345def 中的12345,这肯定是5 位数字。
  • @Sweeper:已修复。
  • 用户在文本框中提交描述,没有任何用户输入限制。如下几点观察:a) ids1.123452.54321... b) ids are12345 54321...c)ids are 12345\n54321...d)ids are 12345\t12345...请指导我!
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2019-07-17
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2011-12-13
  • 1970-01-01
相关资源
最近更新 更多