【问题标题】:RegEx Negative Lookahead with Repeating String带有重复字符串的正则表达式负前瞻
【发布时间】:2020-05-27 21:49:15
【问题描述】:

我有一个源字符串,它具有重复多次的相同字符串。我需要在最后一次出现的字符串(字符串 A)和另一个字符串(字符串 B)之间进行匹配。在字符串 B 之前多次出现字符串 A。

我一直无法找到一个可以工作的负前瞻。

跳到修改后的源字符串

源字符串

<a href="Link1">some text 1</a><a href="Link2">some text 2</a><a href="Link3">Required text</a><a href="Link4">some text 4</a>

注意:字符串 A (<a href=) 出现的次数可能会有所不同。

要求的结果

匹配:<a href="Link3">Required text</a> 使用捕获组 1: Link 3

使用此 RegEx 模式: <a href="(.+?)".+?>Required text<\/a>

匹配:
<a href="Link1">some text 1</a><a href="Link2">some text 2</a><a href="Link3">Required text</a>
捕获组1:Link 1

您可以在此处查看设置:https://regex101.com/r/XsEmXw/1/

我尝试了许多不同的负前瞻,但都没有奏效。例如:
<a href="(.+?)"(?!.+?\<a href.+?Required).+?>Required text<\/a>

TIA 为您提供帮助。


修改的源字符串

好吧,我的错,我在上面的描述中过度简化了源字符串。
实际的源字符串非常复杂。你可以在这里查看:
https://regex101.com/r/VHrrNj/1/

下面提供的答案非常聪明,但不幸的是不适用于完整的复杂情况: <a href="([^"]*)".+?Read more.+?<\/a>

修改后的要求结果

匹配:
<a href="https://s2.washingtonpost.com/298378e/5ece9636e6e81b69fea16209/597ba5e59bbc0f6826cfe531/2/10/1db89a19afda3018ce8cfede0cfb6768" style="color: #2a2a2a; font-weight: bold; text-decoration: none;">Read more »</a>

捕获组 1:https://s2.washingtonpost.com/298378e/5ece9636e6e81b69fea16209/597ba5e59bbc0f6826cfe531/2/10/1db89a19afda3018ce8cfede0cfb6768

再次感谢您的帮助。

【问题讨论】:

  • 你为什么不使用parser来满足这个要求。
  • 我不明白您对“解析器”的评论。我将如何使用它?

标签: regex regex-lookarounds


【解决方案1】:

这里不需要负前瞻。你可以使用这个正则表达式来解决这个问题:

<a href="([^"]*)"[^>]*>Read more[^<]*<\/a>

【讨论】:

  • 保罗,非常感谢您的快速回复和出色的回答。不幸的是,它不适用于我完整的、真实的源字符串。请参阅我对上述问题的修订。
  • 这个工作吗:&lt;a href="([^"]*)"[^&gt;]*&gt;Read more[^&lt;]*&lt;\/a&gt;
  • 是的!!!非常感谢。请更改您的上述答案(或添加另一个),我会选择它作为解决方案。您显然是 RegEx 天才。我必须研究您的解决方案才能理解它,以便将来应用您的技术。
  • 这是更新后的 RegEx101 以及 Paul 的修订答案:regex101.com/r/VHrrNj/2
猜你喜欢
  • 1970-01-01
  • 2020-09-09
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多