Regex - 在 C 中获取 html 标签之间的文本#

Regex - Get text between html tags in C#

提问人:Tom 提问时间:11/11/2023 最后编辑:Wiktor StribiżewTom 更新时间:11/11/2023 访问量:66

问:

我正在尝试在 C# 中获取 2 个 html 标签之间的文本。providerKey 值会经常更改,并且可以有多个这样的标记。我正在尝试获得此值 - Barry Todd Smith,医学博士 (129461)

<div class="headerLink">

<a href="/AffiliationLetters/VerificationLetter/Report?providerKey=_OG4no3ZLu0SfzRBHPwVs95CgOPx7T9VDVn8RVKS4_9JprRJP-OAjHe20&amp;reportKey=7ILaIBnEn9QuHG42XVvQmn_48-fachhNjhjPccErrPn5oEhDIgWjtHRy0&amp;filtered=True" target="blank">Barry Todd Smith, MD                                                       (129461)</a>

</div>

这是我为正则表达式准备的。第一个是 till - 第二个是 till 。target="blank">- </a>

<a href="\/AffiliationLetters\/VerificationLetter\/Report[\\?]providerKey[=](.*?)>

<a href="\/AffiliationLetters\/VerificationLetter\/Report[\?]providerKey[=](.*?)<\/a>
C# 正则表达式

评论

8赞 gunr2171 11/11/2023
请不要使用正则表达式来解析 HTML。使用 HTML 解析器。
0赞 gunr2171 11/11/2023
花点时间阅读帮助中心中的编辑帮助。Stack Overflow 上的格式与其他站点上的格式不同。你的帖子看起来越好,其他人就越容易阅读和理解它。
0赞 Etienne de Martel 11/11/2023
不要使用正则表达式,使用像 AngleSharp 这样的东西。

答:

1赞 lidqy 11/11/2023 #1

使用 HTML 解析器或 HTMLDom 库肯定更方便,也非常可靠,但如果由于某种原因不能使用一个,您可以使用正则表达式来做到这一点,只需跳过第一个右尖括号和下一个左尖括号之间的所有内容 - 而不必过多注意两者之间的属性。

string html = @"<div class=""headerLink"">    
<a href=""/AffiliationLetters/VerificationLetter/Report?providerKey=_OG4no3ZLu0SfzRBHPwVs95CgOPx7T9VDVn8RVKS4_9JprRJP-OAjHe20&amp;reportKey=7ILaIBnEn9QuHG42XVvQmn_48-fachhNjhjPccErrPn5oEhDIgWjtHRy0&amp;filtered=True"" target=""blank"">Barry Todd Smith, MD                                                       (129461)</a>
</div>";    
    
var match = Regex.Match(html, "<a [^<>]+>([^<>]*)");
var anchorValue = match.Result("$1"); // contains 'Barry Todd Smith ...'

如果 href-value 中有未转义的 < 或 > 个字符,它将失败。

评论

0赞 Etienne de Martel 11/12/2023
根据我的经验,人们使用正则表达式来解析 HTML 的原因是他们认为正则表达式是解析任何内容的唯一方法,他们不知道还有其他选择。
0赞 Tom 11/12/2023
我有一根绳子。但是当我尝试将其转换为 HTML 文档时,它出错了。这就是我使用正则表达式的原因。HtmlDocument doc = 新 HtmlDocument();医生。负载(结果);医生。。Load(results) 给了我一个非法字符的错误。