有 Java 编程相关的问题?

你可以在下面搜索框中键入要查询的问题!

java查找正则表达式的哪个部分导致了匹配

我得到了以下格式的正则表达式:

((.*)Venue1(.*)) | ((.*)Venue2(.*)) | ((.*)Venue3(.*))

然后我得到了一些twitter消息,使用这个正则表达式,我发现消息中是否提到了一个地点(我知道这个方法有一些bug,但目前对我来说还不错)。然而,通过这种方式,我不知道提到的确切地点,因为我使用的是tweet.matches(regex)。我想打破整个正则表达式,分别检查每个场馆名称的twitter消息。你认为有没有更快捷的方法来检查,是哪个长正则表达式中的场地名称导致了这场比赛


共 (3) 个答案

  1. # 1 楼答案

    您可以使用组。沿着this的路线可以解决旅游问题Vogella也有一些例子。谷歌搜索“java正则表达式组”会给你很多参考资料:)

  2. # 2 楼答案

    使用(.*)Venue([123])(.*),然后检查第二对括号之间的内容

  3. # 3 楼答案

    您可以将所有场馆放在一个组中,并获得该组的价值:

    .*(Venue1|Venue2|Venue3).*
    

    在上面的正则表达式中,匹配的场地将是第一组。(我假设您的场地只是示例,如果不是,您可以进一步简化。)

    之后,您可以使用^{}

    public static void main(String[] args) throws java.lang.Exception {
        checkVenue("Test Venue1 test test");
        checkVenue("Test Venue2 test test");
        checkVenue("Test Venue3 test test");
        checkVenue("Test Venue1 Venue3 test");
    }
    
    public static void checkVenue(String tweet) {
        Pattern p = Pattern.compile(".*(Venue1|Venue2|Venue3).*");
        Matcher m = p.matcher(tweet);
        System.out.print(tweet + ":\t ");
        if (m.find()) {
            System.out.println("found " + m.group(1));
        } else {
            System.out.println("found none.");
        }
    }
    

    输出:

    Test Venue1 test test:   found Venue1
    Test Venue2 test test:   found Venue2
    Test Venue3 test test:   found Venue3
    Test Venue1 Venue3 test:     found Venue3
    

    Run this demo online here