首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >分析足球队和结果

分析足球队和结果
EN

Stack Overflow用户
提问于 2018-08-17 09:34:49
回答 3查看 288关注 0票数 0

我正试图解析一个字符串来检索主队和客队,以及它的结果。

所以字符串可以是这样的:

代码语言:javascript
复制
Football: Real Madrid 2-1 FC Barcelona
Football: Atletico de Madrid 4-2 Real Madrid

假设您有主团队名称,加上{homeTeamGoals}-{awayTeamGoals}中的结果,然后是离开团队名称

我想使用regexp解析字符串并检索团队名称和结果。我想要有这样的东西:

代码语言:javascript
复制
String PATTERN_SPORT = "([a-zA-Z]+ ?[0-9]?)"
String PATTERN_NAME = "(.*)"
String PATTERN_RESULT = "([0-9]*)-([0-9]*)"
String PATTERN_SPORT_AND_HOME_TEAM_RESULT_AWAY_TEAM = Pattern.compile("^" + PATTERN_SPORT + ": " + PATTERN_NAME + " " + PATTERN_RESULT + " ?"
    + PATTERN_NAME + "?$")

但是它不匹配,我不知道为什么,因为我使用了模式名称(.*),有任何线索吗?

EN

回答 3

Stack Overflow用户

回答已采纳

发布于 2018-08-17 09:44:54

您需要确保您匹配所有Unicode空白空间( :之后的第一个空白空间是一个不间断的空间)。用\s替换所有空格,用Pattern.UNICODE_CHARACTER_CLASS选项替换compileing将解决这个问题:

代码语言:javascript
复制
String PATTERN_SPORT = "([a-zA-Z]+\\s?[0-9]?)";
String PATTERN_NAME = "(.*)";
String PATTERN_RESULT = "([0-9]*)-([0-9]*)";
Pattern PATTERN_SPORT_AND_HOME_TEAM_RESULT_AWAY_TEAM = Pattern.compile("^" + PATTERN_SPORT + ":\\s" + PATTERN_NAME + "\\s" + PATTERN_RESULT + "\\s?"
    + PATTERN_NAME + "$", Pattern.UNICODE_CHARACTER_CLASS);

Java演示

代码语言:javascript
复制
String s = "Football: Real Madrid 2-1 FC Barcelona";
String PATTERN_SPORT = "([a-zA-Z]+\\s?[0-9]?)";
String PATTERN_NAME = "(.*)";
String PATTERN_RESULT = "([0-9]*)-([0-9]*)";
Pattern PATTERN_SPORT_AND_HOME_TEAM_RESULT_AWAY_TEAM = Pattern.compile("^" + PATTERN_SPORT + ":\\s" + PATTERN_NAME + "\\s" + PATTERN_RESULT + "\\s?" + PATTERN_NAME + "$", Pattern.UNICODE_CHARACTER_CLASS);

Matcher matcher = PATTERN_SPORT_AND_HOME_TEAM_RESULT_AWAY_TEAM.matcher(s);
if (matcher.matches()){
    System.out.println(matcher.group(1)); 
    System.out.println(matcher.group(2)); 
    System.out.println(matcher.group(3)); 
    System.out.println(matcher.group(4)); 
    System.out.println(matcher.group(5)); 
} 

输出:

代码语言:javascript
复制
Football
Real Madrid
2
1
FC Barcelona
票数 1
EN

Stack Overflow用户

发布于 2018-08-17 10:10:22

我将使用以下正则表达式:(\w*:)\s?(.*)\s?(\d{1,2}-\d{1,2})\s?(.*) 请看这里

  • 第1组(\w*:)将与这项运动相匹配,并:(最终您可以改进这个项目,使其只参加不需要: ->的运动,只需做(\w*):)
  • 第2组(.*)第一团队名称
  • 第3组(\d{1,2}-\d{1,2})这将取任何分数(0-0到99-99)。
  • 第4组(.*)第二组名称

只需忽略\s。这只适用于您的格式(如果您有其他格式,可以调整regex )。

爪哇:

代码语言:javascript
复制
import java.util.regex.Matcher;
import java.util.regex.Pattern;

class Test {
    public static void main(String [] args){
        String s = "Football: Hannover 96 3-3 1.FC Nuernberg";
        String PATTERN_SPORT = "(\\w*:)";
        String PATTERN_NAME = "(.*)";
        String PATTERN_RESULT = "(\\d{1,2}-\\d{1,2})";
        Pattern PATTERN_RESULTS= Pattern.compile("^" + PATTERN_SPORT + "\\s?" + PATTERN_NAME + "\\s?" + PATTERN_RESULT + "\\s?" + PATTERN_NAME + "$", Pattern.UNICODE_CHARACTER_CLASS);

        Matcher matcher = PATTERN_RESULTS.matcher(s);
        if (matcher.matches()){
                System.out.println(matcher.group(1)); 
                System.out.println(matcher.group(2)); 
                System.out.println(matcher.group(3)); 
                System.out.println(matcher.group(4)); 
        }
    }
}

您可以在这里粘贴代码并测试它。

输出:

代码语言:javascript
复制
Football:
Hannover 96 
3-3
1.FC Nuernberg
票数 2
EN

Stack Overflow用户

发布于 2018-08-17 10:03:01

您可以尝试以下模式:(?<=: )(?P<home_team>[\w ]+) (?P<result>\d{1,2}-\d{1,2}) (?P<away_team>[\w ]+)

您可能需要使用不同的football:(?<=Football: )来解析足球结果。

我还假设,一支球队的进球不会超过100个:) \d{1,2}将与0-99的比分相匹配。

演示

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/51892465

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档