Python 需要正则表达式帮助,多行正则表达式
Python regular expression help needed, multiple lines regex
如何解码 .eml 并获得令牌
首先,.eml
编码在 MIME quoted-printable
中(提示是行尾的 =
符号。你应该先解码它,而不是处理编码的 raw 文本。
其次,正则表达式有点矫枉过正。一些不错的 string.split()
用法也能正常工作。正则表达式在其正确的使用场景中非常有用,但一些简单的 python 通常可以做同样的事情而不必使用正则表达式的魔法风格,这可能会像 [已编辑].
一样令人困惑。
请注意,如果您正在构建正则表达式,始终建议您使用众多正则表达式编辑器之一,因为它们将帮助您构建正则表达式...我个人最喜欢的是 regex101
编辑:添加了正则表达式方法。
import quopri
import re
def get_url_by_regex(raw):
decoded = quopri.decodestring(raw).decode("utf-8")
return re.search('(<a href=")(.*?)(")', decoded).group(2)
def get_url(raw):
decoded = quopri.decodestring(raw).decode("utf-8")
for line in decoded.split('\n'):
if 'token=' in line:
return line.split('<a href="')[1].split('"')[0]
return None # just in case this is needed
print(get_url(raw_email))
print(get_url_by_regex(raw_email))
结果是:
https://app.rule.io/subscriber/optIn?token=eyJ0eXAiOiJKV1QiLCJhbGciOiJIUzI1NiJ9.eyJzd[REST_OF_TOKEN_REDACTED]
https://app.rule.io/subscriber/optIn?token=eyJ0eXAiOiJKV1QiLCJhbGciOiJIUzI1NiJ9.eyJzd[REST_OF_TOKEN_REDACTED]
谢谢你的解释,对我很有帮助!
如何解码 .eml 并获得令牌
首先,.eml
编码在 MIME quoted-printable
中(提示是行尾的 =
符号。你应该先解码它,而不是处理编码的 raw 文本。
其次,正则表达式有点矫枉过正。一些不错的 string.split()
用法也能正常工作。正则表达式在其正确的使用场景中非常有用,但一些简单的 python 通常可以做同样的事情而不必使用正则表达式的魔法风格,这可能会像 [已编辑].
请注意,如果您正在构建正则表达式,始终建议您使用众多正则表达式编辑器之一,因为它们将帮助您构建正则表达式...我个人最喜欢的是 regex101
编辑:添加了正则表达式方法。
import quopri
import re
def get_url_by_regex(raw):
decoded = quopri.decodestring(raw).decode("utf-8")
return re.search('(<a href=")(.*?)(")', decoded).group(2)
def get_url(raw):
decoded = quopri.decodestring(raw).decode("utf-8")
for line in decoded.split('\n'):
if 'token=' in line:
return line.split('<a href="')[1].split('"')[0]
return None # just in case this is needed
print(get_url(raw_email))
print(get_url_by_regex(raw_email))
结果是:
https://app.rule.io/subscriber/optIn?token=eyJ0eXAiOiJKV1QiLCJhbGciOiJIUzI1NiJ9.eyJzd[REST_OF_TOKEN_REDACTED]
https://app.rule.io/subscriber/optIn?token=eyJ0eXAiOiJKV1QiLCJhbGciOiJIUzI1NiJ9.eyJzd[REST_OF_TOKEN_REDACTED]
谢谢你的解释,对我很有帮助!