【问题标题】:Regular expression for anchor tag in c# [duplicate]c#中锚标记的正则表达式[重复]
【发布时间】:2019-01-04 08:01:19
【问题描述】:

我的锚标记如下所示:-

    <a href="/as" title="asd" page="as" name="asd" reference="Yes" type="relativepath">as
</a>

我是这样尝试的:-

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

当结束锚标记&lt;/a&gt; 应该在同一行时,它工作正常。
但在我的情况下,结束锚标记应该在下一行。

如果结束锚标记在下一行,我需要一个它应该支持的正则表达式。

欢迎提出建议。

【问题讨论】:

标签: c# regex


【解决方案1】:

您应该使用(?s) 内联选项:

(?s)<a [^>]*?>(?<text>.*?)</a>

demo

在 C# 中,您还可以通过以下方式使用RegexOptions.Singleline 选项:

var input = "<a href=\"/as\" title=\"asd\" page=\"as\" name=\"asd\" reference=\"Yes\" type=\"relativepath\">as\r\n</a>";
var regex = new Regex(@"<a [^>]*?>(?<text>.*?)</a>", RegexOptions.Singleline);
var result2 = regex.Match(input).Value;

输出:

编辑:

这是正则表达式的更新版本,它考虑了没有属性的&lt;a&gt; 标签(这几乎是不可能的,但让我们想象一下 :)),并使其不区分大小写(谁知道,也许&lt;A HREF="SOMETHING_HERE"&gt; 也可以出现):

var regex = new Regex(@"(?i)<a\b[^>]*?>(?<text>.*?)</a>", RegexOptions.Singleline);

【讨论】:

  • 感谢您的帮助。它正在工作。
  • 太好了,很高兴为您提供帮助。请考虑接受答案。
【解决方案2】:

只需使用 DOTALL 修饰符,使正则表达式中出现 DOT 以匹配偶数换行符。

@"(?s)<a [^>]*?>(?<text>.*?)</a>"

你可以使用否定字符类。

@"<a [^>]*?>(?<text>[^<>]*)</a>"

【讨论】:

  • 如果没有?,它将从第一个开始a标签到最后一个结束a标签匹配。
  • 哦,对不起。当然是贪婪的算子。我的错。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2017-10-04
  • 2019-01-16
  • 2017-06-01
  • 1970-01-01
相关资源
最近更新 更多