如何使用扫描仪和模式类匹配文本中的模式?
Posted
技术标签:
【中文标题】如何使用扫描仪和模式类匹配文本中的模式?【英文标题】:How Match a Pattern in Text using Scanner and Pattern Classes? 【发布时间】:2011-06-22 09:44:00 【问题描述】:我想查找我的文本文件中是否存在特定模式。
我为此使用以下类:
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+\\d1,\\s+\\d1,\\s+");
while(sr.hasNext(p))
System.out.println("Pattern exists");
System.out.println("Matched String : "+sr.next(p));
但是, 模式不匹配,即使它存在于那里..
我认为问题出在我的模式字符串上:
\\s+([a-zA-Z])1\\s+\\d1,\\s+\\d1,\\s+"
任何人,请帮助我应该使用什么模式字符串????
【问题讨论】:
【参考方案1】:这条正则表达式行有效:
\\s+\\w\\s+\\d+\\s+\\d+
您的matcher (p.matcher
) 中的group(0)
提供A 102 190
.
[编辑] 好的,我会给你一个完整的工作示例:
Pattern p = Pattern.compile("\\s+\\w\\s+\\d+\\s+\\d+");
Matcher matcher = p.matcher("DBREF 1A1F A 102 190 UNP P08046 EGR1_MOUSE 308 396");
matcher.find();
System.out.println("Found match: " + matcher.group(0));
// Found match: A 102 190
【讨论】:
我刚试了一下,效果很好。您确定要提取匹配器的第一个group
吗?
你试过这条线吗:- DBREF 1A1F A 102 190 UNP P08046 EGR1_MOUSE 308 396
是的,这也有效。我现在给你一个完整的例子来说明我的观点。【参考方案2】:
我不确定 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+\\d1,\\s+\\d1,\\s+");
Matcher matcher = p.matcher(line);
while (matcher.find())
System.out.printf("group: %s%n", matcher.group());
System.out.println("done");
【讨论】:
仍然无法正常工作.. 我认为问题出在 pattern.compile 参数上 他们为我工作得很好。也许有点冗长,但它们应该可以工作。尝试如上所示的小型编译测试程序。 你试过这条线吗:- DBREF 1A1F A 102 190 UNP P08046 EGR1_MOUSE 308 396 我已经尝试过在我的代码中发布的行,并且效果很好。尝试时会发生什么? 我怀疑您的程序中存在您未显示的错误。同样,创建一个非常小的可编译可运行示例,就像我发布的那样,然后将此代码作为补充发布在您的问题中,让我们测试您的实际代码。 -- 编辑:没关系! :) 很高兴你能成功!以上是关于如何使用扫描仪和模式类匹配文本中的模式?的主要内容,如果未能解决你的问题,请参考以下文章