【问题标题】:RegEx replace only occurrences outside of <h> html tagsRegEx 仅替换 <h> html 标记之外的匹配项
【发布时间】:2021-10-22 01:36:25
【问题描述】:

我想在下面的文本中用正则表达式替换 Plus,但前提是它包含在标题标签中:

<h4 class="Somethingsomething" id="something">Plus plan</h4>The <b>Plus</b> plan starts at $14 per person per month and comes with everything from Basic.

在上面我想替换第二个“Plus”而不是第一个。

到目前为止,我的正则表达式尝试是:

(?!<h\d*>)\bPlus\b(?!<\\h>)

意思:

  1. 如果在
  2. 结尾,则不要捕获以下内容
  3. 仅当“Plus”组被空格或空白包围时才捕获

但是 - 这会捕获这两种情况。有人可以指出我的错误并纠正吗?

我想在 VBA 中使用它,但据我所知,这应该是一个一般的正则表达式问题。

Somewhat related but not addressing my problem in regex

Not relevant, as not RegEx

【问题讨论】:

  • VBA 中的正则表达式当然不是一般的正则表达式问题。这里只考虑一个非 POSIX 正则表达式。
  • 试试\bPlus\b(?![^&gt;]*&lt;\/h\d+&gt;),见regex101.com/r/Dkkn2y/2。或者,\bPlus\b(?=&lt;\/b&gt;),参见regex101.com/r/Dkkn2y/3。您是替换还是提取匹配项?你想达到什么目的?如果您共享当前的 VBA 代码,也会有所帮助。
  • 替换是目标。我需要将我们的变量插入到链接页面。所以替换的值应该是:&lt;h4 class="Somethingsomething" id="something"&gt;Plus plan&lt;/h4&gt;The &lt;b&gt;{{Provider_Link 'Plus', 33}}&lt;/b&gt; plan starts at $14 per person per month and comes with everything from Basic.
  • 好的,那么\bPlus\b(?![^&gt;]*&lt;\/h\d+&gt;) 是一种可能适合您的解决方法。替换为{{Provider_Link '$&amp;', 33}}。见regex101.com/r/Dkkn2y/4

标签: html regex vba regex-negation regexp-replace


【解决方案1】:

你可以使用

\bPlus\b(?![^>]*<\/h\d+>)

请参阅regex demo。要在替换模式中使用匹配,请在 VBA 代码中使用 $&amp; 反向引用。

详情

  • \bPlus\b - 一个完整的词Plus
  • (?![^&gt;]*&lt;\/h\d+&gt;) - 如果在当前位置的右侧有
    • [^&gt;]* - 除&gt; 之外的零个或多个字符
    • &lt;\/h - &lt;/h 字符串
    • \d+ - 一位或多位数字
    • &gt; - 一个 &gt; 字符。

【讨论】:

    猜你喜欢
    • 2017-11-03
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-07-26
    • 1970-01-01
    • 2020-09-01
    • 1970-01-01
    相关资源
    最近更新 更多