如何在python正则表达式中获取匹配的子匹配

2024-06-26 02:25:36 发布

您现在位置:Python中文网/ 问答频道 /正文

我有一根这样的绳子:

str='< TOPICS>< D>cocoa< /D>< /TOPICS>< PLACES>< D>el-salvador< /D>< D>usa< /D>< D>uruguay< /D>< /PLACES>'

我想在<;PLACES>;和<;/PLACES>;中获取<;D>;和<;/PLACES>;之间的字符串;。 我知道流动:

p1=re.compile(r'(?<=<PLACES>)(.*?)(?=</PLACES>)')
p2=re.compile(r'(?<=<D>)(.*?)(?=</D>)')

有了p1和p2,我就能得到萨尔瓦多,美国,乌拉圭。但是我怎样才能只使用一个p来获取信息。在


Tags: ltgtreelp2placescompilep1
1条回答
网友
1楼 · 发布于 2024-06-26 02:25:36

您可以使用这样的正则表达式:

(?<=<D>)([^<>]*)(?=</D>)(?=(?:(?!<PLACES>).)*</PLACES>)

regex101 demo

其中肯定的lookahead (?=(?:(?!<PLACES>).)*</PLACES>)确保前面某处有一个</PLACES>,在匹配的内容和结束标记之间没有任何开头<PLACES>。在

但您确实应该考虑使用适当的解析器,例如BeautifulSoup

^{pr2}$

编辑:根据JonClements在评论中的建议,您还可以使用:

>>> for m in soup.select('places d'):
...     print(''.join(m))
...
el-salvador
usa
uruguay

相关问题 更多 >