无法找出列表的正则表达式匹配

时间:2017-05-22 00:52:08

标签: python regex

我不确定从哪里开始弄清楚如何从下面的小列表中提取只是团队名称。似乎有太多的变化。显然,在所有球队名称前面都有一个空格。但它们不是固定长度的名称,有些在团队名称本身内部有连字符,撇号和空格。在团队的最后一个字之后,在单个" 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 =

任何正则表达的家伙都想对此嗤之以鼻?

3 个答案:

答案 0 :(得分:2)

这相对容易:

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

答案 1 :(得分:1)

这样的事情怎么样?不需要正则表达式。

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)

答案 2 :(得分:1)

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

\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