java - 如何使用扫描仪和模式类匹配文本中的模式?

标签 java regex pattern-matching java.util.scanner

我想找出我的文本文件中是否存在特定模式。

我为此使用以下类:

java.util.regex.Pattern and java.util.Scanner;

我的示例文本行是

String Line="DBREF  1A1F A  102   190  UNP    P08046   EGR1_MOUSE     308    396";

并且,我想匹配以下类型的模式:

A    102   190

其中,在 A 的位置 a-z 或 A-Z 但单包机。

在 102 的位置任意整数和任意长度。

在 190 的位置任意整数和任意长度。

并且,我的模式匹配代码是:

     Scanner sr=new Scanner(Line);
     Pattern p = Pattern.compile("\\s+([a-zA-Z]){1}\\s+\\d{1,}\\s+\\d{1,}\\s+");
     while(sr.hasNext(p))
     {
         System.out.println("Pattern exists");
         System.out.println("Matched String : "+sr.next(p));
     }

但是, 模式不匹配,即使它存在..

我认为问题出在我的模式字符串上:

\\s+([a-zA-Z]){1}\\s+\\d{1,}\\s+\\d{1,}\\s+"

任何人,请帮助我我应该使用什么模式字符串????

最佳答案

我不确定 Scanner 是最好的工具,因为 hasNext(Pattern) 检查下一个 complete token 是否有下一个模式。您的模式跨越标记。

您是否尝试过使用 Matcher 对象而不是 Scanner?

import java.util.regex.Matcher;
import java.util.regex.Pattern;

public class Foo2 {
    public static void main(String[] args) {
        String line = "DBREF  1A1F A  102    190  UNP     P08046    EGR1_MOUSE      308     396";
        Pattern p = Pattern.compile("\\s+[a-zA-Z]\\s+\\d{1,}\\s+\\d{1,}\\s+");

        Matcher matcher = p.matcher(line);

        while (matcher.find()) {
            System.out.printf("group: %s%n", matcher.group());
        }
        System.out.println("done");
    }
}

关于java - 如何使用扫描仪和模式类匹配文本中的模式?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4915967/

相关文章:

regex - 在 perl 中打印模式

regex - 如何替换此列表中的每个项目?

javascript - 获取匹配项和非匹配项的数组

java - Derby 的另一个实例可能已经使用嵌入式数据库启动了数据库

java - StAX 内存不足错误

android - 智能手机上的实时图像识别

正则表达式匹配图像 URL

numpy - 将数组与 Numpy 中的行进行匹配

java - Jenkins:构建步骤的条件触发器

java - 如何通过整数键 Java 对数组的 HashMap 进行排序