【问题标题】:Replace anchor tag value with anchor title if href value is empty by regex如果正则表达式的 href 值为空,则将锚标记值替换为锚标题
【发布时间】:2017-11-16 21:14:11
【问题描述】:

如果任何锚标记的 href 属性为空,我将尝试将锚标记值替换为锚的标题值。

喜欢

<a xlink:href="">Lorem Ipsum</a>  is simply dummy text of the printing and typesetting industry<a xlink:href ="http://google.com">Google</a>. 

如果我尝试使用以下正则表达式:

<a [^>]+>(.*?)<\/a>

演示http://regexr.com/3h6on

然后输出我低于

Lorem Ipsum is simply dummy text of the printing and typesetting industry Google. 

它用锚文本值替换了两个锚标记,我需要替换那些 href 属性值为空的锚标记。

我需要像下面这样的输出

Lorem Ipsum is simply dummy text of the printing and typesetting industry<a xlink:href ="http://google.com">Google</a> 

【问题讨论】:

  • 这会有帮助吗? &lt;a xlink:href=\"\"&gt;(.*?)&lt;\/a&gt;
  • 不@ramesh 我也添加了正则表达式测试链接,谢谢帮助
  • @PriyankGupta - 您问题中的示例有双引号,而正则表达式只有单引号。对于单引号,请尝试 &lt;a xlink:href=\'\'&gt;(.*?)&lt;\/a&gt;
  • 为什么不使用 html 敏捷包——更可靠的方法。 html-agility-pack.net/?z=codeplex

标签: c# regex


【解决方案1】:

我的方法看起来相当混乱,但对于您提供的测试链接,它似乎就像您希望的那样工作:

<a [^>]+?(?=href=(?:"|')(?:"|'))[^>]*?>(.*?)<\/a>

Try it with this link.


我添加到正则表达式的是以下部分

[^>]+?(?=href=(?:"|')(?:"|'))[^>]*?

.我添加的部分开头和结尾的通配符只是为了匹配 之间的任何其他属性或空格。

括号内的正则表达式称为positive lookahead。这意味着它将匹配括号内的任何内容,但不会将其包含在结果中。

肯定的前瞻匹配一个 href 后跟一个空字符串。

请注意,如果 href= 表达式后的引号不匹配,我的正则表达式仍然匹配

我希望这回答了你的问题。

【讨论】:

  • 我测试了我原来的 sting,但它选择了从第一个到最后一个锚链接的字符串。
  • @PriyankGupta Strange - 对我来说,它就像你想要的那样工作:regexr.com/3h6oq
  • yaa @neel 它适用于这种情况,但不适用于我的情况,请参阅此链接regexr.com/3h6pc
  • @PriyankGupta 更正了我对您提供的案例的回答:regexr.com/3h6q7
  • 感谢@Neele 提供帮助,您的更新解决了我的问题。
【解决方案2】:

请试试这个:&lt;a[^&lt;]+href=(['"]{2})\1?[^&gt;]*?&gt;([^&lt;&gt;]*)&lt;\/a&gt;

Try it here.

【讨论】:

    猜你喜欢
    • 2011-04-19
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2023-03-31
    • 1970-01-01
    • 2023-04-03
    • 1970-01-01
    相关资源
    最近更新 更多