请教一个正则提取问题

2018-08-16 08:30:11 +08:00
 aqtata

我需要提取 html 代码中非 A 标签的内容应该怎么写?也就是所有">"和"<"之间的内容,但是跳过<a...>之间的内容

<div>123<a href="#" title="abc" target="_blank">456</a>789<br/>hello</div>

比如上面这段 HTML,除了 A 标签之间的"456"不提取,其他的"123"、"789"、"hello"都提取出来

3484 次点击
所在节点    正则表达式
8 条回复
wangchonglie
2018-08-16 08:59:56 +08:00
我提供一个方法,第一步先将<a>xx</a>的字段找出来,然后替换掉为一个新的标签,最后再匹配>(.*?)<中的内容就可以提取到你想要的内容了。抛砖引玉,期待别人更好的回答。
yangg
2018-08-16 09:19:02 +08:00
什么语言,最好直接用 bs, pyquery 或者 cheerio 之类的
JmmBite
2018-08-16 09:34:43 +08:00
`([^<>]+?)<(?!\/a)`
IssacTomatoTan
2018-08-16 09:34:45 +08:00
/[^>]+(?=<\/a>)/
des
2018-08-16 09:42:52 +08:00
后排说一句,HTML 很有可能碰到不标准的,不建议用正则来匹配
rabbbit
2018-08-16 09:47:54 +08:00
先把<a></a>去掉再匹配,因为 a 标签里可能有别的东西,例如

<p>DIV<a>AAA<b>BBB</b>CCC</a>DIV</p>
aqtata
2018-08-16 10:01:21 +08:00
感谢各位大佬相助,已经解决。其实匹配所有标签也行,程序中判断一下就可以。如果完全靠正则可以用 3 楼朋友的,测试可行。
zhaogaz
2018-08-16 10:09:02 +08:00
印象中 应该是要用 零宽断言 用不用贪婪 需要看你匹配到哪个 </a>了

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://www.v2ex.com/t/480230

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX