regex 足球桌的正则表达式

gstyhher  于 2023-06-25  发布在  其他
关注(0)|答案(1)|浏览(64)

我有一个自由文本格式的足球表:
我努力创建了一个正则表达式,它将适用于可选数字和多个空格分隔的单词。无论我创建什么,都倾向于在俱乐部名称后面包含数字,或者在其他方面失败。
示例:
这可能是我能找到的最接近的了。正则表达式工作正常,只要我最多有两个单词,没有数字。(\d+)\s+([A-Za-z\s]+)(\d+)\s+(\d+)\s+(\d+)\s+(\d+)\s+(\d+)\s+(\d+)\s+(\d+)\s+(\d+)\s+(\d+)这适用于除7和14以外的所有行。
当我将数字添加到第二组时,正则表达式开始溢出到表中的整数中:(\d+)\s+([A-Za-z0-9\s]+)(\d+)\s+(\d+)\s+(\d+)\s+(\d+)\s+(\d+)\s+(\d+)\s+(\d+)\s+(\d+)\s+(\d+)
编辑:Tim要求指出预期结果:示例:
match = [ '14','Vukovar 1991','0','30','8','7','15','29','52','-23','31' ]

kmbjn2e3

kmbjn2e31#

使用下面的正则表达式:

"(\d+)\s{2}([A-Za-z]+(?:\s[A-Za-z0-9]+)*)\s+(\d+)\s+(\d+)\s+(\d+)\s+(\d+)\s+(\d+)\s+(\d+)\s+(\d+)\s+(-?\d+)\s+(\d+)(?:\s+\[(.+)\])?"gm

参见regex101中的演示
Python代码:

import re

regex = r"(\d+)\s{2}([A-Za-z]+(?:\s[A-Za-z0-9]+)*)\s+(\d+)\s+(\d+)\s+(\d+)\s+(\d+)\s+(\d+)\s+(\d+)\s+(\d+)\s+(-?\d+)\s+(\d+)(?:\s+\[(.+)\])?"

test_str = ("1  Cibalia Vinkovci          0  30  21   5   4  67  24   43   68 [promoted]\n"
    "2  Vihor Jelisavac           0  30  16   6   8  44  29   15   54\n"
    "3  Cepin                     0  30  14   7   9  49  29   20   49\n"
    "4  Belisce                   0  30  14   6  10  53  39   14   48\n"
    "5  Mladost Zdralovi          0  30  13   8   9  48  35   13   47 [moved to group \"North\"]   \n"
    "6  Slavonija Pozega          0  30  12   7  11  45  40    5   43\n"
    "7  Marsonia Slavonski Brod   0  30  12   6  12  38  40   -2   42\n"
    "8  Zrinski Jurjevac          0  30  11   8  11  35  35    0   41\n"
    "14  Vukovar 1991              0  30   8   7  15  29  52  -23   31\n")

matches = re.findall(regex, test_str, re.MULTILINE)
print(matches)

相关问题