Python Can';t找出列表的正则表达式匹配项
我不知道该从哪里开始弄清楚如何从下面列表的小片段中提取出团队名称。似乎有太多的变化。显然,在所有团队名称之前有一个空格。但它们不是固定长度的名称,有些名称本身内部有连字符、撇号和空格。在团队的最后一个单词之后,在末尾的单个“A”或双“AA”字母之前,始终至少有一个空格Python Can';t找出列表的正则表达式匹配项,python,regex,Python,Regex,我不知道该从哪里开始弄清楚如何从下面列表的小片段中提取出团队名称。似乎有太多的变化。显然,在所有团队名称之前有一个空格。但它们不是固定长度的名称,有些名称本身内部有连字符、撇号和空格。在团队的最后一个单词之后,在末尾的单个“A”或双“AA”字母之前,始终至少有一个空格   1 Clemson A =   5 Ohio State A =  155 Tennessee-Martin
  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 =
有人想试试这个吗?像这样的怎么样?不需要正则表达式
行
是字符串列表,其中每个字符串都是数据中的一行
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)
像这样的怎么样?不需要正则表达式
行
是字符串列表,其中每个字符串都是数据中的一行
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)
这相对容易:
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
这相对容易:
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
尝试使用以下正则表达式:
\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+=
尝试使用以下正则表达式:
\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+=
这是从网站上刮下来的还是文本文件的片段?最初的格式是什么?@dizzyf它被废弃了。页面乱七八糟。这是从网站上刮下来的还是一个文本文件的片段?最初的格式是什么?@dizzyf它被废弃了。页面乱七八糟。这还将捕获结尾处的a/AA加上空格,而不仅仅是团队名称。@zwer我的印象是a/AA是团队名称的一部分。如果不是编辑,请参阅编辑case@NishanthMatha不,A/AA不是团队名称的一部分。您更新的正则表达式现在似乎可以工作了。我只需要通过它来理解它。我几乎没有使用Regex的工作经验,所以对我来说这就像是一种新语言。这还将在结尾捕获a/AA加上空格,而不仅仅是团队名称。@zwer我的印象是a/AA是团队名称的一部分。如果不是编辑,请参阅编辑case@NishanthMatha不,A/AA不是团队名称的一部分。您更新的正则表达式现在似乎可以工作了。我只需要通过它来理解它。我几乎没有使用正则表达式的工作经验,所以它对我来说就像是一种新语言。这很有魅力。现在我需要看看你到底做了什么,然后我自己去弄明白……读@Nishanth Matha的答案,他解释得很好,这很有魅力。现在我需要看看你到底做了些什么,然后我自己去弄清楚……看看@Nishanth Matha的答案,他解释得很好