java - 在 Java 中使用 Scanner 时,在一行中匹配标记时出现问题

标签 java regex java.util.scanner

我需要匹配输入文本行中的某些内容。这些行看起来像这样:

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

我正在使用 Scanner 类来读取文本的每一行,并且我编写了以下代码。但是,有些东西无法正常工作,因为模式“to”与该行不匹配,它应该是,因为“to”包含在该行中(我尝试不仅匹配该行中的“to”,但没有匹配):

 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 中找不到任何方法。可以这样做吗?我基本上想连续遍历该行,将该行的各个部分存储在不同的变量中,然后使用这些变量的值。由于我不知道第一个“/”符号之前有多少个 token ,因此我无法使用 next() 一定次数。

提前谢谢您。

最佳答案

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

http://java.sun.com/j2se/1.4.2/docs/api/java/util/regex/Matcher.html

此外,如果您扩展模式以包含匹配组(有关匹配组如何工作的更多详细信息,请参阅常规正则表达式引用),您可以使用 .group()成功匹配后的函数,用于检索与模式中特定组匹配的子字符串。

关于java - 在 Java 中使用 Scanner 时,在一行中匹配标记时出现问题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1225009/

相关文章:

java.lang.NullPointerException : Attempt to read from field 'java.lang.String com.example.g.Model.PersonalShopper.ps_name' on a null object reference

java - 在 Executor Service 的 ThreadPool 中添加线程

java - 关于使用 this 实现 equals 来比较 Java 中的对象

python - 正则表达式检查链接是否指向文件

regex - 在正则表达式的特定点过滤输入量?

java - 完成后处理写入?

java - 用于从特定文件夹下载文件的 Servlet?

Python:将格式字符串转换为正则表达式

java - 扫描仪不断抛出 FileNotFoundException

java - 扫描程序在使用next()或nextFoo()之后跳过nextLine()吗?