我不确定从哪里开始弄清楚如何从下面的小列表中提取只是团队名称。似乎有太多的变化。显然,在所有球队名称前面都有一个空格。但它们不是固定长度的名称,有些在团队名称本身内部有连字符,撇号和空格。在团队的最后一个字之后,在单个" A"之前总是至少有一个空格。或双重" AA"最后的信件。
  1 Clemson A =
  5 Ohio State A =
 155 Tennessee-Martin AA =
 152 Louisiana-Monroe A =
 104 Hawai'i A =
 193 VMI AA =
 202 Stephen F. Austin AA =
任何正则表达的家伙都想对此嗤之以鼻?
答案 0 :(得分:2)
这相对容易:
import re
raw = """
  1 Clemson A =
  5 Ohio State A =
 155 Tennessee-Martin AA =
 152 Louisiana-Monroe A =
 104 Hawai'i A =
 193 VMI AA =
 202 Stephen F. Austin AA =
"""
teams = re.findall(r" \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 `=`
捕获的组将为您提供团队名称
修改如果A / AA不是团队名称的一部分,请执行以下操作:
\d\s+(.*?)\s+[A]+\s+=