找不出正则表达式与lis的匹配

2024-10-03 09:09:00 发布

您现在位置:Python中文网/ 问答频道 /正文

我不知道从哪里开始想办法从下面列表的小片段中提取球队名称。似乎变化太大了。显然,在所有团队名称之前有一个空格。但它们不是固定长度的名称,有些名称在团队名称内部有连字符、撇号和空格。在团队的最后一个单词之后,在结尾的单个“A”或双“AA”字母之前,总是至少有一个空格

&nbsp  1  Clemson              A  =
&nbsp  5  Ohio State           A  =
&nbsp155  Tennessee-Martin     AA =
&nbsp152  Louisiana-Monroe     A  =
&nbsp104  Hawai'i              A  =
&nbsp193  VMI                  AA =
&nbsp202  Stephen F. Austin    AA =

有正则表达式的家伙想试试这个吗


Tags: 名称列表结尾字母团队字符单词aa
3条回答

这相对容易:

import re

raw = """
&nbsp  1  Clemson              A  =
&nbsp  5  Ohio State           A  =
&nbsp155  Tennessee-Martin     AA =
&nbsp152  Louisiana-Monroe     A  =
&nbsp104  Hawai'i              A  =
&nbsp193  VMI                  AA =
&nbsp202  Stephen F. Austin    AA =
"""

teams = re.findall(r"&nbsp\s*\d+\s+(.*?)\s+A+\s+=", raw)

for team in teams:
    print(team)

# Clemson
# Ohio State
# Tennessee-Martin
# Louisiana-Monroe
# Hawai'i
# VMI
# Stephen F. Austin

尝试使用以下正则表达式:

\d\s+(.*?)\s+=

    - \d match digit
    - \s+ followed by one or more space
    - (.*) anything
    - \s+ followed by one or more spaces
    - = followed by  `=`

被抓获的小组会给你一个小组的名字

Regex Demo

编辑如果A/AA不是团队名称的一部分,请执行以下操作:

\d\s+(.*?)\s+[A]+\s+=

Updated Regex

像这样的怎么样?不需要正则表达式

lines是字符串列表,其中每个字符串都是数据中的一行

for line in lines:
    splits = line.split(" ")
    teamName = splits[1]
    if hasNumbers(teamName):
        teamName = splits[2]

    print(teamName)


def hasNumbers(inputString):
    return any(char.isdigit() for char in inputString)

相关问题 更多 >