在Java中使用正则表达式解析字符串

4

我有一个字符串。字符串是"New England 12 Philidelphia 24 (Final)"。我需要一个正则表达式,可以从中检索以下项目。

  1. 第一支队伍 - New England
  2. 第一支队伍得分 - 12
  3. 第二支队伍 - Philidelpia
  4. 第二支队伍得分 - 24
  5. 结果 - 最终或括号中的任何内容。

3
你需要解析“汉诺威96 2 - 沙尔克04 1(决赛)”吗? - Thilo
1
汉诺威96与沙尔克04(决赛) - Raghunandan
1
我完全同意。额外的2分和1分就是得分。 - Thilo
@Thilo甚至没有提到慕尼黑1860队:D - moonwave99
将数字放在前面,或者说1. FC Saarbruecken。 - Thilo
3个回答

5
以下是一个 SSCCE,展示如何使用正则表达式和分组来提取所需数据。
顺便说一句,虽然它可以处理你提供的输入,但是这段代码将扫描包含多个结果的输入,在while循环中匹配所有结果。
public static void main( String[] args ) {
    String input = "New England 12 Philidelphia 24 (Final)";
    String regex = "([a-zA-Z ]+)\\s+(\\d+)\\s+([a-zA-Z ]+)\\s+(\\d+)\\s+\\((\\w+)\\)";
    Matcher matcher = Pattern.compile( regex ).matcher( input);
    while (matcher.find( )) {
        String team1 = matcher.group(1);
        String score1 = matcher.group(2);
        String team2 = matcher.group(3);
        String score2 = matcher.group(4);
        String result = matcher.group(5);
        System.out.println( team1 + " scored " + score1 + ", " + team2 + " scored " + score2 + ", which was " + result);
    }
}

输出

New England scored 12, Philidelphia scored 24, which was Final

0

使用这个:

"(\\w+) (\\d+) (\\w+) (\\d+) \((\\w+)\)"

它怎么能被“测试”?它甚至都无法编译!(提示:这是一个Java问题) - Bohemian
天哪。没有看到那个。对不起,那是C#,但这个正则表达式应该可以正常工作。 - Shiridish
我不知道如何在Java中从组中提取内容,所以只能给你正则表达式。请查看此链接中的解决方案,了解如何使用上述表达式从组中提取值。 - Shiridish
我猜你必须添加额外的 \,比如"(\w+) (\d+) (\w+) (\d+) \((\w+)\)",这样才能在java中转义 \。 - Raghunandan
是的,为了避免\(,我们使用\进行转义。但是对于\w\d,您是否也需要这样做呢?我认为不需要!那样行得通吗? - Shiridish
它没有起作用。在Java中,您必须使用额外的\来转义反斜杠。 - Raghunandan

0

试一下这个

^[\D]*\s*\d*\s*[\D]*\s*\d*\s*\([\D]*\)$

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接