【问题标题】:extracting football score from user input从用户输入中提取足球比分
【发布时间】:2013-02-05 19:01:11
【问题描述】:

我正在用 python 编写一个程序来处理用户输入的足球比分。例如: Newcastle United 4 - 6 Manchester united

上面的分数也可以写成

NUFC 4-6 MUFCnewcastle 4-6 manu等等......

我的目的是提取球队名称和分数: Newcastle United,4,6,Manchester United.

我需要有关如何做到这一点的建议。我能想到的一种方法是正则表达式,但我不太熟悉正则表达式,所以我在这里寻求帮助。 谢谢

【问题讨论】:

    标签: python regex python-2.7


    【解决方案1】:

    下面的正则表达式可以做到这一点:

    ^(.*?) *(\d+) *- *(\d+) *(.*)$
    

    组:

    • 第 1 组:左队
    • 第 2 组:左队得分
    • 第 3 组:正确的球队得分
    • 第 4 组:正确的团队

    【讨论】:

    • 谢谢,您的解决方案似乎只适用于Newcastle United 4 - 6 Manchester united 而不适用于提到的其他示例,我在这里检查过gskinner.com/RegExr
    • Mgilson:但您的将接受制表符而不是空格。 @vineetrok 对我有用吗?也许您需要启用多行正则表达式,因为这将逐行检查,确保它捕获整行。
    • @Inductiveload:我在gskinner.com/RegExr 上试过你的版本,我用我的问题作为测试文本,但它似乎没有找到任何东西。如果我错了,请纠正我。
    • 我也在那里尝试过——就像我说的,你需要将它用作多行正则表达式,否则锚点 ^$ 将匹配整组行的开头和结尾并且会失败。这个答案假设单行是分数或不是。
    【解决方案2】:

    这似乎有效...

    >>> re.match(r'(.*?)\s*(\d+)\s*\-\s*(\d+)\s*(.*)',s).groups()
    ('Newcastle United', '4', '6', 'Manchester united')
    

    【讨论】:

      【解决方案3】:

      一般来说,分数可以描述为 5 个项目的列表:

      1. 任意文字
      2. 一串数字
      3. 连字符
      4. 一串数字
      5. 任意文字

      连字符的两边可能有也可能没有空格。

      以下应该有效:

      g = re.match("(.*) ([0-9]+) ?- ?([0-9]+) (.*)", user_input)
      if g:
          team1 = g.group(1)
          team1_score = g.group(2)
          team2_score = g.group(3)
          team2 = g.group(4)
      

      group() 调用中的数字对应正则表达式中的括号,从左到右。

      【讨论】:

      • 我希望我能将所有答案都打勾,但这个对我有用,而且有点详细。谢谢!
      猜你喜欢
      • 1970-01-01
      • 2018-02-13
      • 1970-01-01
      • 2020-03-08
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2013-08-06
      • 1970-01-01
      相关资源
      最近更新 更多