如何返回与正则表达式不匹配的字符串中的所有内容?

时间:2016-04-13 17:01:36

标签: python regex

我有一个字符串和一个匹配部分字符串的正则表达式。我希望在删除所有匹配项后返回一个字符串,表示原始字符串的剩余部分。

import re

string="<font size="2px" face="Tahoma"><br>Good Morning,&nbsp;</font><div><br></div><div>As per last email"

pattern = r'<[a-zA-Z0-9 ="/\-:;.]*>'

re.findall(pattern, string)

['<font size="2px" face="Tahoma">',
 '<br>',
 '</font>',
 '<div>',
 '<br>',
 '</div>',
 '<div>']

desired_string = "Good Morning,&nbsp;As per last email"

2 个答案:

答案 0 :(得分:2)

使用re.findall代替re.sub,用空字符串替换每个matche。

re.sub(pattern, "", string)

虽然这是关于从字符串中删除模式的一般问题的字面答案,但看起来您的具体问题与操作HTML有关。尝试使用正则表达式操作HTML通常是一个坏主意。有关详细信息,请参阅此问题的答案:https://stackoverflow.com/a/1732454/7432

答案 1 :(得分:1)

使用像BeautifulSoup这样的HTML解析器,而不是正则表达式。看起来您正在尝试剥离HTML元素并获取基础文本。

from bs4 import BeautifulSoup

string="""<font size="2px" face="Tahoma"><br>Good Morning,&nbsp;</font><div><br></div><div>As per last email"""

soup = BeautifulSoup(string, 'lxml')

print(soup.get_text())

输出:

Good Morning, As per last email

有一点需要注意的是,使用此方法将&nbsp;更改为常规空间。