我目前正在尝试编写一个正则表达式来从我拥有的页面中拉出链接。问题是只有当链接有“库存”时才需要拔出链接。这是我代码明智的概述:
<td class="prd-details">
<a href="somepage">
...
<span class="collect unavailable">
...
</td>
<td class="prd-details">
<a href="somepage">
...
<span class="collect available">
...
</td>
我想做的是只有在标签中有“收集可用”的情况下才能拔出链接。我试图用正则表达式做到这一点:
(?s)prd-details[^=]+="([^"]+)" .+?collect{1}[^\s]+ available
然而,在运行它时,它会找到第一个'prd-details'类并继续前进,直到找到'collect available',从而得到不正确的结果。我想通过在单词collect之后指定{1}它只会使用它找到的单词的第一个实例,但显然我错了。我一直在尝试使用不同的东西,比如积极和消极的前瞻,但我似乎无法开始工作。
任何人都可以帮我解决这个问题吗?
谢谢,
丹
答案 0 :(得分:0)
如果您坚持使用正则表达式执行此操作,我建议采用两步拆分检查方法:
prd-details
。prd-details
中,查看它是否包含collect available
href
这比尝试一步完成所有操作更容易。更易于阅读,编写和维护。
答案 1 :(得分:0)
你需要一个知道“收集不可用”的表达式是垃圾。在链接捕获后,您应该能够使用通配符进行负向前瞻。类似的东西:
prd-details[^=]+="([^"]+)"(.(?!collect un))+?collect available
这将收集链接后没有“收集联合国”的任何字符。这应该消除捕获“收集不可用”块以及“收集可用”。
我在C#中测试过将文本视为一行。根据您的语言和正则表达式库,您可能需要稍微不同的语法和选项。