Python 如何仅在换行符出现在html标记中时才删除它们?

Python 如何仅在换行符出现在html标记中时才删除它们?,python,html-parsing,Python,Html Parsing,抱歉,另一个python新手问题。我有一个字符串: my_string = "<p>this is some \n fun</p>And this is \n some more fun!" my_string=“这是一些\n乐趣这是\n更多乐趣!” 我想: my_string = "<p>this is some fun</p>And this is \n some more fun!" my_string=“这很有趣而且这\n更有趣!”

抱歉,另一个python新手问题。我有一个字符串:

my_string = "<p>this is some \n fun</p>And this is \n some more fun!"
my_string=“这是一些\n乐趣

这是\n更多乐趣!”
我想:

my_string = "<p>this is some fun</p>And this is \n some more fun!"
my_string=“这很有趣

而且这\n更有趣!”
换句话说,只有在html标记中出现“\n”时,我如何才能去掉它

我有:

my_string = re.sub('<(.*?)>(.*?)\n(.*?)</(.*?)>', 'replace with what???', my_string)
my_string=re.sub(“(.*?)\n(.*?”,“替换为什么?”,my_string)

这显然不起作用,但我被卡住了。

正则表达式与HTML不匹配。不要这样做。看


相反,使用HTML解析器。Python附带,或者您可以使用或。然后,您所要做的就是遍历树并删除换行符。

您应该尝试使用BeautifulSoup(
bs4
),这将允许您解析XML标记和页面

>>> import bs4
>>> my_string = "<p>this is some \n fun</p>And this is \n some more fun!"
>>> soup = bs4.BeautifulSoup(my_string)
>>> p = soup.p.contents[0].replace('\n ','')
>>> print p

虽然,这可能无法完全按照您希望的方式工作(因为网页可能会有所不同),但可以根据您的需要复制此代码。

可能重复的“请勿尝试使用正则表达式解析XML或HTML”它将不起作用,使用专用的解析器,然后您可以从内容中正则化出
\n
,并将其写出来。Python正则化函数在这方面还不够强大,除非您愿意省事。例如,如果您满足于“如果下一个HTML标记是结束标记,则删除换行符,并且不关心注释”,那么您可能有机会使用regex。@JoachimIsaksson:我不知道您是如何得出结论,这是这个问题的重复。事实并非如此,因为这个问题并不是关于正则表达式的,它还表达了一个询问者想要解决的关于HTML处理的特定问题。除非问题真的是重复的,否则请不要标记重复项。@JoachimIsaksson:也许regex不是解决问题的方法,但是你的链接没有回答我的问题:如何删除HTML标记中的换行符。我认为你和其他一些人因为没有关注最初的问题而偏离了方向,Beautifulsoup才是你真正想要做的,特别是对于任意HTML文档(特别是任意质量的文档)@JonasWielicki:嗯,这取决于文档来自何处。我个人在使用Python创作web内容时使用html5lib——HTML5中错误(和缩写)的语义比Beautiful Soup中的错误(和缩写)的语义更为人熟知。
>>> tags = soup.find_all(None)
>>> for tag in tags:
...    if tag.child is None:
...        tag.child.contents[0].replace('\n ', '')
...    else:
...        tag.contents[0].replace('\n ', '')