【问题标题】:RegEx select whole string but omit substring match正则表达式选择整个字符串但忽略子字符串匹配
【发布时间】:2017-12-07 20:34:27
【问题描述】:

考虑一个长的 html 字符串:我需要整个内容没有特定的标签部分。

示例:

考虑以下字符串:

;decreasing'>1</a>&nbsp;<span class='active'>2</span><a href='&#2;F;search&

我需要选择除了跨度部分之外的所有部分,因此删除以下内容

<span class='active'>2</span>

最后只有以下内容

;decreasing'>1</a>&nbsp;<a href='&#2;F;search&

我在regex101.com 的选择后面尝试了以下操作,但没有运气。

^(?!=(<span class='active'>(.*?)<\/span>)).*$

[附加信息]

如果我可以结合以下两个选择,它将解决问题:

1.选择直到span标签

的所有内容
.*?(?=<span)
  1. 结束跨度标签开始选择所有内容:
(?<=span>).*

提前感谢您的帮助。

【问题讨论】:

  • 您将在哪种语言/环境中运行此模式?
  • 你为什么不做一个简单的replace 然后打印 perl -lpe 's/&lt;span.*?span&gt;//g' file

标签: regex regex-negation


【解决方案1】:

如果您的编码语言允许您进行正则表达式拆分或替换调用,您可以使用此模式:

~&lt;(span).*?(/\1)&gt;~ 或像这样扩展您的标签列表:~&lt;(span|div).*?(/\1)&gt;~

Demo Link

使用正则表达式模式处理 html 存在风险,但它们可能会发挥作用,也可能不会发挥作用,具体取决于 html 的结构。

【讨论】:

  • 如果我的方法因任何原因不适合,请给我留言并考虑改进您的问题。
  • 嗨 mickmackusa,感谢您的建议,但如果我没记错的话,您的正则表达式会选择我需要删除的文本。我需要做的是选择除此之外的所有剩余文本。
  • @polarized 这就是为什么我建议您将其与拆分或替换功能一起使用。您使用什么语言?
  • 您好,我需要将它与屏幕抓取程序一起使用来创建子提取器模式。由于 标签部分的位置在被抓取的多个页面中不断变化,我需要忽略它并只考虑字符串的其余部分。不幸的是,我不能使用替换功能,只能使用 RegEx。我设法做到了一次,但真的不记得解决方案了。 :-(
  • @polarized 屏幕抓取程序的名称是什么?
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2021-01-31
  • 2011-11-08
  • 1970-01-01
相关资源
最近更新 更多