我需要从输入的文本的行匹配某些事情。线看起来像这样:

 to be/ Σ _ Σ  [1pos, 1neg] {0=1, 2=1}

我使用的扫描器类来读取文本的各行,我已经写下面的代码。然而,有些东西不能正常工作,因为行话“以”未对线路匹配,它应该是,因为“到”被包含在该行(我曾尝试不仅是“以”从线路匹配,但没有匹配):

 Scanner scanner = new Scanner(file);
 while(scanner.hasNext()) {
      String line = scanner.nextLine();
      System.out.println("line: " + line);
      Pattern p_pos = Pattern.compile("to");
      Matcher m_pos = p_pos.matcher(line);
      String match = m_pos.group(0);
      System.out.println("match: " + match);
      boolean b_pos = m_pos.matches();
      if(b_pos) {
          System.out.println(match);
      }
 }

输出:

line:    to be/ Σ _ Σ  [1pos, 1neg] {0=1, 2=1}
Exception in thread "main" java.lang.IllegalStateException: No match found
    at java.util.regex.Matcher.group(Matcher.java:485)
    at lady.PhrasesFromFile.readFile(PhrasesFromFile.java:31)
    at lady.PhrasesFromFile.main(PhrasesFromFile.java:17)

我有一个问题:我怎么可以处理线,这样我存储从行至第一个“/”符号的开始一切吗?我无法找到该API中的任何方法。是否可以这样做呢?我基本上要连续经过的路线,店内件在不同的变量行,然后用这些变量的值。因为我不知道我的第一个“/”符号前有多少令牌有,我不能靠近使用()一定的次数。

感谢您提前。

有帮助吗?

解决方案

.matches()尝试匹配的整个输入字符串。如果你想匹配输入字符串的一部分,或者.find()如果要匹配输入字符串的开头使用.lookingAt()

HTTP:// java的.sun.com / J2SE / 1.4.2 /文档/ API / JAVA / util的/正则表达式/ Matcher.html

此外,如果您扩展模式,包括匹配组(详见匹配组的工作一般的正则表达式参考),你可以使用.group()功能的匹配成功后,获取由内某一特定群体相匹配的子串图案。

其他提示

您可以提取部分通过使用需要令牌:

String tokenSection = Pattern.compile("(to\\s+.*?)/").matcher(line).find().group(1);

,然后用该循环使用提取的令牌

Pattern.compile("\\w+").matcher(tokenSection).find();

显然,就不会堵塞上述的代码段右英寸

许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top