我有以下代码将一大块文本与电子邮件隔离开来:
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\
?谢谢!
答案 0 :(得分:0)
此代码应删除文本中的任何“= \ r \”。
result = re.sub("=\\\\r\\\\", "", searchText)
答案 1 :(得分: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)
# This will just substitue the '=\r\' with nothing.
message = re.sub(r'=\\r\\', '', message)
print message
答案 2 :(得分: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']
答案 3 :(得分:0)
如果print
消息给你这个:
['Lorem ipsum dolor sit amet,consectetur adipiscing elit。 Cras et erat libe = \ r \ nro。 Ut lacinia ante euismod nibh feugiat pellentesque。 Suspendisse vestibul = \ r \ n
...然后您没有要删除的任何\
字符或r
字符。您有回车符,Python显示为\r
(回车)字符。您还有新行,Python显示为\n
。
那是因为你看到了字符串的repr
,而不是str
。通常,print x
打印str
...但str
(或其他集合)的list
包括repr
,而不是str
,或其每个元素。
如果您实际打印str
,就像在print message[0]
中一样,您会看到如下内容:
Lorem ipsum dolor坐下来,精神上的精神。 Cras et erat libe = RO。 Ut lacinia ante euismod nibh feugiat pellentesque。 Suspendisse vestibul =
因此,您不想删除'\r\
,或删除\r\n
,或将\r\n
替换为换行符或类似内容。字符串已经正确。 (如果需要,可以将Windows风格的\r\n
换行符转换为Unix风格的\n
,但您不需要。)
当然,除了每行末尾的=
个字符。解决这个问题:
s.replace('=\r', '\r')
或者,为列表中的每个字符串修复它:
[s.replace('=\r', '\r') for s in message]