【问题标题】:How to get only the first line matching the regex in Java using Pattern matcher?如何使用模式匹配器仅获取与 Java 中正则表达式匹配的第一行?
【发布时间】:2017-02-04 12:17:07
【问题描述】:

假设我在一个文本文件中有一个足球俱乐部名称列表,每行一个名称。

Arsenal
Manchester United
Chelsea
Liverpool
...
...
Manchester City
Real Madrid

假设我需要找到以“曼彻斯特”开头的行,我有下面的正则表达式。

Pattern clubman = Pattern.compile("Manchester.*");
Matcher matche = clubman.matcher(fileString);
        if (matche.find()) {

            System.out.println("Manchester club is :"
                    + matche.group(0));
        }

但是我只需要匹配匹配正则表达式的第一行,即Manchester United。 但是Pattern.compile 正在寻找最后一个匹配项,即Manchester City

如何只获取与正则表达式匹配的第一行?

【问题讨论】:

  • 匹配以字符串开头的行不需要正则表达式。
  • 抱歉,此数据仅供参考。我处理机密数据,所以不能在这里发布。我的基本问题是只获得与模式匹配的第一行而不是最后一行。
  • 无论如何,以字符串开头的匹配行不需要正则表达式。

标签: java regex pattern-matching


【解决方案1】:

不要为此使用正则表达式。没有理由这样做,它只会让你的问题变得比它需要的更难。只需遍历文件中的每一行并执行类似的操作

string match = "Manchester";
if (line.length() >= match.length()) {
  if (line.substring(0, match.length()).equals(match)) {
    return line;
  }
}

【讨论】:

  • 抱歉,此数据仅供参考。我处理机密数据,所以不能在这里发布。我的基本问题是只得到与模式匹配的第一行而不是最后一行。
  • @CS_noob 没关系。我的回答是一样的。遍历每一行,检查是否匹配,如果匹配,则返回该行。如果您必须使用正则表达式来检查匹配项,那就去吧。无论如何,它会具有更好的性能,因为不需要处理整个文件。
【解决方案2】:

要检查是否有匹配项,您应该使用 groupCount().
您正在使用 find() 找到下一个匹配项,因此程序将打印第二个匹配项。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-06-17
    • 1970-01-01
    • 1970-01-01
    • 2016-04-24
    • 2016-11-03
    • 1970-01-01
    相关资源
    最近更新 更多