gpt4 book ai didi

regex - 正则表达式用链接替换单词

转载 作者:行者123 更新时间:2023-12-01 08:18:43 25 4
gpt4 key购买 nike

我想写一个正则表达式,用链接替换巴黎这个词,因为只有这个词还没有准备好成为链接的一部分。

例子:

    i'm living <a href="Paris" atl="Paris link">in Paris</a>, near Paris <a href="gare">Gare du Nord</a>,  i love Paris.

会成为
    i'm living.........near <a href="">Paris</a>..........i love <a href="">Paris</a>.

最佳答案

这是很难一步完成的。编写一个正则表达式来做到这一点几乎是不可能的。

尝试两步法。

  • 在每个“巴黎”周围放置一个链接,无论是否已经存在另一个链接。
  • 找到所有错误嵌套的链接 ( <a href="..."><a href="...">Paris</a></a> ),并消除内部链接。

  • 第一步的正则表达式非常简单:
    \bParis\b

    第二步的正则表达式稍微复杂一些:
    (<a[^>]+>.*?(?!:</a>))<a[^>]+>(Paris)</a>

    在整个字符串上使用那个,并用匹配组 1 和 2 的内容替换它,有效地去除多余的内部链接。

    用简单的话解释正则表达式 #2:
  • 查找每个链接( <a[^>]+> ),可选择后跟任何不属于其本身的链接( .*?(?!:</a>) )。将其保存到比赛组 1。
  • 现在寻找下一个链接( <a[^>]+> )。确保它在那里,但不要保存它。
  • 现在寻找“巴黎”这个词。将其保存到比赛组 2。
  • 寻找关闭链接 ( </a> )。确保它在那里,但不要保存它。
  • 将所有内容替换为第 1 组和第 2 组的内容,从而丢失您未保存的所有内容。

  • 该方法假设这些附带条件:
  • 您的输入 HTML 并没有严重损坏。
  • 您的正则表达式风格支持非贪婪量词 (.*?) 和零宽度负前瞻断言 ( (?!:...) )。
  • 在步骤 1 中,您仅将“Paris”一词包裹在链接中,没有附加字符。每个“Paris ”变成“<a href"...">Paris</a> ”,否则第二步将失败(直到您更改第二个正则表达式)。
  • 顺便说一句:regex #2 明确允许这样的构造:
    <a href="">in the <b>capital of France</b>, <a href="">Paris</a></a>
    多余的链接来自第一步,第二步的替换结果为:
    <a href="">in the <b>capital of France</b>, Paris</a>
  • 关于regex - 正则表达式用链接替换单词,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/276029/

    25 4 0
    Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
    广告合作:1813099741@qq.com 6ren.com