0

我有以下代码从电子邮件中分离出一段文本:

for part in mail.walk():
    if part.get_content_type() == 'text/plain':
        content = part.get_payload()
        message = re.compile(r'\%(.+?)\%', re.DOTALL).findall(content)
        print message

这可以完美地找到文本,但是,当它出现时prints,我会得到如下信息:

['Lorem ipsum dolor sit amet, consectetur adipiscing elit. Cras et erat libe=\r\
nro. Ut lacinia ante euismod nibh feugiat pellentesque. Suspendisse vestibul=\r\
...

如何删除=\r\每行末尾的 ?谢谢!

4

4 回答 4

0

如果print消息给你这个:

['Lorem ipsum dolor sit amet,consectetur adipiscing elit。Cras et erat libe=\r\nro. Ut lacinia ante euismod nibh feugiat pellentesque。暂停前庭=\r\n

......那么你没有任何\字符或r字符要删除。您有回车字符,Python 将其显示为\r(回车)字符。你还有换行符,Python 显示为\n.

那是因为您看到的repr是字符串的,而不是str. 通常,print x打印str… 但stra list(或其他集合)的 the 包括repr,而不是str,或它的每个元素。

如果您实际打印str,如print message[0],您将看到如下内容:

Lorem ipsum dolor sit amet, consectetur adipiscing elit。Cras et erat libe= ro。Ut lacinia ante euismod nibh feugiat pellentesque。悬垂前庭=

因此,您不想删除'\r\、删除\r\n或替换\r\n为换行符或类似的东西。字符串已经正确。(如果需要,您可以将 Windows 样式的\r\n换行符转换为 Unix 样式\n,但您不必这样做。)

=当然,每行末尾的字符除外。要解决这个问题:

s.replace('=\r', '\r')

或者,为列表中的每个字符串修复它:

[s.replace('=\r', '\r') for s in message]
于 2013-05-07T19:30:56.787 回答
0

Could we see the initial text it starts with?

From what I see at the moment you could modify your code to do the following;

for part in mail.walk():
    if part.get_content_type() == 'text/plain':
        content = part.get_payload()
        message = re.compile(r'\%(.+?)\%', re.DOTALL).findall(content)
        # This will just substitue the '=\r\' with nothing.
        message = re.sub(r'=\\r\\', '', message)
        print message
于 2013-05-07T19:04:18.340 回答
0

此代码应删除文本中的任何“=\r\”。

result = re.sub("=\\\\r\\\\", "", searchText)
于 2013-05-07T19:04:06.863 回答
0

您正在使用此正则表达式:

message = re.compile(r'\%(.+?)\%', re.DOTALL).findall(content)

这可能更好地表述为:

message = re.findall(r'\%(.+?)\%', content, flags=re.DOTALL)

在任何一种情况下,findall 都会产生一个字符串列表——而不是一个字符串作为结果。

如果您有一个字符串列表,则需要使用列表推导:

>>> me
['Lorem ipsum dolor sit amet, consectetur adipiscing elit.=\r', 'Ut lacinia ante euismod nibh feugiat pellentesque.=\r', 'Suspendisse vestibul=\r']
>>> [re.sub(r'=\r','',e) for e in me]
['Lorem ipsum dolor sit amet, consectetur adipiscing elit.', 'Ut lacinia ante euismod nibh feugiat pellentesque.', 'Suspendisse vestibul']

或者只使用 strip 或 rstrip:

>>> [e.rstrip('\r') for e in me]
['Lorem ipsum dolor sit amet, consectetur adipiscing elit.', 'Ut lacinia ante euismod nibh feugiat pellentesque.', 'Suspendisse vestibul']
于 2013-05-07T19:13:01.237 回答