在字符串中查找 hrefs 值
Posted
技术标签:
【中文标题】在字符串中查找 hrefs 值【英文标题】:Find hrefs value in string 【发布时间】:2020-02-22 20:10:32 【问题描述】:如何从所有 href 中检索所有 url 我不想使用 html Agility Pack 或类似的 - 必须是干净的代码并且非常短。
HttpClient client = new HttpClient();
static async Task Main(string[] args)
Program program = new Program();
await program.GetTodoItems();
await program.Function();
Console.WriteLine("Hello Word!");
private async Task GetTodoItems()
string ResponseHtml = await client.GetStringAsync("https://example.com");
var LinkParser = new Regex(@"\b(?:https?://|www\.)\S+\b", RegexOptions.Compiled | RegexOptions.IgnoreCase);
foreach (Match m in LinkParser.Matches(ResponseHtml))
Console.WriteLine(m.Value);
我希望干净的网址不会翻倍,并且仅适用于网站而不适用于脚本。这段代码向我展示了一些带有额外标签和字符的链接:
https://example.com/libs/jquery/1.11.2/jquery.min.js">
https://www.google-analytics.com/analytics.js','ga
【问题讨论】:
您说您要检索所有网址,但您的正则表达式仅匹配以 http: https: 和 www 开头的字符串。这并不涵盖您在 href 中可能遇到的所有 url 请不要通过破坏您的帖子为他人增加工作量。通过在 Stack Exchange (SE) 网络上发帖,您已根据 CC BY-SA license 授予 SE 分发内容的不可撤销权利(即无论您未来的选择如何)。根据 SE 政策,分发非破坏版本。因此,任何破坏行为都将被撤销。请参阅:How does deleting work? …。如果允许删除,则帖子下方左侧有一个“删除”按钮,但仅在浏览器中,而不是移动应用程序中。 锁定没有明确的持续时间,因为以前的锁定已过期。请不要和版主玩猫捉老鼠。 【参考方案1】:围绕“一个或多个非空白”扩展捕获组
LinkParser = new Regex(@"\b(?<url>https?://\S+)['""]", RegexOptions.Compiled | RegexOptions.IgnoreCase);
然后使用
访问匹配集合m.Groups["url"].Value
更简单的模式也可以很好地工作:\b(?<url>http.*?)['"]
这些都是非常原始的,我不能保证它适用于所有情况。如果您的 url 根本没有被引用,请考虑在 end 类中添加空格和右尖括号。你最好使用可靠的库来处理这个because ...
【讨论】:
这并不能解决 OP 的问题,它仍然会捕获 url 之后直到第一个空格的任何内容。以上是关于在字符串中查找 hrefs 值的主要内容,如果未能解决你的问题,请参考以下文章