使用存储变量作为正则表达式模式

0 投票
2 回答
1185 浏览
提问于 2025-04-16 07:23

有没有办法让Python使用存储在变量中的值作为正则表达式的模式呢?

假设我有两个变量:

begin_tag = '<%marker>'
end_tag = '<%marker/>'

doc = '<html> something here <%marker> and here and here <%marker/> and more here <html>'

那么我该如何提取在begin_tag和end_tag之间的文本呢?

这些标签是在解析另一个文件后确定的,所以它们并不是固定的。

2 个回答

1

正则表达式其实就是一串字符串。所以你可以随意组合它们,比如用加号(+)把它们连起来,或者用百分号(%)来插入变量等等。只要把你想匹配的变量和你想用的正则表达式连接起来就行了:

begin_tag + ".*?" + end_tag

唯一需要注意的是,如果你的变量里有一些特殊字符,正则表达式引擎可能会把它们当成有特殊含义的字符。在这种情况下,你需要确保这些字符被正确处理。你可以使用 re.escape() 这个函数来做到这一点。

还有一个常见的提醒就是:“不要用正则表达式来解析HTML”。

2

别用正则表达式。聪明地解析HTML吧!

from BeautifulSoup import BeautifulSoup
marker = 'mytag'
doc = '<html>some stuff <mytag> different stuff </mytag> other things </html>'
soup = BeautifulSoup(doc)
print soup.find(marker).renderContents()

撰写回答