3 回答

TA貢獻1815條經驗 獲得超13個贊
>>> re.findall(r"((?:(?<=email=)|(?<=secret=))[^;]+)", s)
['12345', '[email protected]']
但是現在您需要一種方法來識別哪些結果值是秘密,哪些是電子郵件。我建議還使用正則表達式提取此信息(這也消除了后視):
>>> dict(kv.split('=') for kv in re.findall(r"((?:secret|email)=[^;]+)", s))
{'secret': '12345', 'email': '[email protected]'}

TA貢獻1799條經驗 獲得超8個贊
import re
print(re.findall("(?<=secret=)[^;]+|(?<=email=)[^;]+", s))
# output
# ['12345', '[email protected]']

TA貢獻2065條經驗 獲得超14個贊
您可以使用 dict 理解:
import re
url = "https://test.com/change-password?secret=12345;[email protected];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', '[email protected]']
添加回答
舉報