这是我的字符串:
string ='First: Michael, Second: Dennis, Third: Michael, \nAssists: Michael, Scoring: Michael, Rebounds: Peter, Steals: Dennis'
此字符串包含许多代表荣誉及其收件人的项目。我试图首先确定谁是谁的赢家 '第一'奖励,然后提取涉及该收件人的所有其他项目。
所以在这种情况下,我们会检查第一个收件人的获胜者是谁(Michael),以及 然后我们拿出所有涉及迈克尔的荣誉(以及名字迈克尔)。
所以结果应该是这样的:
'第一名:Michael,第三名:Michael,助攻:Michael,得分:Michael'
我试图利用后退来和周围环境一起使用,但它有点混乱
import re
string ='First: Michael, Second: Dennis, Third: Michael, \nAssists: Michael, Scoring: Michael, Rebounds: Peter, Steals: Dennis'
re.findall('(?=First: (\w+)), (?=\w+: \w+, )|(\w+: \1,)+', string)
答案 0 :(得分:1)
所以 - 如果你想用regexp来做这个是一个很好的“益智琐事”(我甚至可能稍后试一试) - 但是allyou中的所有人都会有脆弱的代码 - 如果你的输入数据格式会有所改变,这将是一场维护噩梦。
现在,“稳定”的方式:选择该字符串 - 将其拆分为“,” - 然后将每个段拆分为“:”,剥离每个组件,并创建一个Python字典。然后使用字典理解表达式来提取所需的数据是微不足道的:
def get_first_accolade(text):
parts = text.split(",")
data = {}
for item in parts:
key, value = item.split(",")
data[key.strip()] = value.strip()
result = {key: value for key, value in data.items() if value == data["first"]}
return result