在Python正则表达式中使用backrefrencing有点复杂

2024-09-28 05:22:23 发布

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

这是我的字符串:

string ='First: Michael, Second: Dennis, Third: Michael, \nAssists: Michael, Scoring: Michael, Rebounds: Peter, Steals: Dennis'

这个字符串包含许多表示荣誉及其接收者的项目。我想先确定谁是冠军 “首先”表扬,然后拿出所有其他涉及收件人的物品

所以在这个例子中,我们检查第一个接收者的获胜者是谁(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)

Tags: 项目字符串restringpeterfirstsecondscoring
1条回答
网友
1楼 · 发布于 2024-09-28 05:22:23

所以-如果你想用regexps做这件事,这是一个很好的“谜题琐事”(我以后可能会尝试一下)-但总而言之,你会有脆弱的代码-如果你的输入数据格式有点变化,它将无法工作,这将是一个维护的噩梦

现在,“稳定”的方法是:选取字符串-在“,”处拆分-然后在“:”处拆分每个段,剥离每个组件,并从中创建一个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

相关问题 更多 >

    热门问题