3 回答
TA贡献1815条经验 获得超13个赞
>>> re.findall(r"((?:(?<=email=)|(?<=secret=))[^;]+)", s)
['12345', 'test@gmail.com']
但是现在您需要一种方法来识别哪些结果值是秘密,哪些是电子邮件。我建议还使用正则表达式提取此信息(这也消除了后视):
>>> dict(kv.split('=') for kv in re.findall(r"((?:secret|email)=[^;]+)", s))
{'secret': '12345', 'email': 'test@gmail.com'}
TA贡献1799条经验 获得超8个赞
import re
print(re.findall("(?<=secret=)[^;]+|(?<=email=)[^;]+", s))
# output
# ['12345', 'test@gmail.com']
TA贡献2065条经验 获得超14个赞
您可以使用 dict 理解:
import re
url = "https://test.com/change-password?secret=12345;email=test@gmail.com;previous_password=hello;new=1"
rx = re.compile(r'(?P<key>\w+)=(?P<value>[^;]+)')
dict_ = {m['key']: m['value'] for m in rx.finditer(url)}
# ... then afterwards ...
lst_ = [value for key in ("secret", "email") if key in dict_ for value in [dict_[key]]]
print(lst_)
# ['12345', 'test@gmail.com']
添加回答
举报