正则表达式帮助:获取除扩展名.css,.js,.jpg,.gif,.png之外的URL列表
我在Regex表达式中遇到问题。
我想从给定的字符串中获取所有URL,但不希望获得以.jpg,.css,.js,.gif等结尾的URL。
这是我的ASP.NET C#代码,
using (var client = new WebClient()) { client.Headers[HttpRequestHeader.UserAgent] = "Mozilla/5.0 (Windows; U; Windows NT 6.1; en-US; rv:1.9.2.13) Gecko/20101203 Firefox/3.6.13"; string result = client.DownloadString(strBasicUrl); Regex MyRegex = new Regex("http(s)?://([\w+?\.\w+])+([a-zA-Z0-9\~\!\@\#\$\%\^\&\*\(\)_\-\=\+\\\/\?\.\:\;\'\,]*)?", RegexOptions.Multiline | RegexOptions.CultureInvariant | RegexOptions.Compiled); MatchCollection matches = MyRegex.Matches(result); foreach (var item in matches) { litResult.Text += item.ToString() + "
"; } }
我想改变这个正则表达式….
如果我请求strBasicUrl“https://www.Microsoft.com”, 那么它不应该是URL下面的结果 例如 https://i.microsoft.com/en-us/homepage/shared/templates/components/hpSearch/images/searchSprite.ltr.gif https://i.microsoft.com/global/ImageStore/PublishingImages/Asset/Header/logo_skype.png
非常感谢,任何人都可以帮助我。
在此先感谢Amit Prajapati
我认为迈克已经回答了你的问题,但是自从你提出问题以来我一直在思考这个问题,并且由于你的问题,我学会了outlook未来,在正则表达式中看后面和负面看法。
因此,如果您不想在循环中触发正则表达式,这里有一个替代方法。
public Regex MyRegex = new Regex( "href="(?(?:(?!javascript)(?!#))[a-zA-Z0-9\~\!\@\#\$"+ "\%\^\&\*\(\)_\-\=\+\\\/\?\.\:\;\'\,]+)"+ "(?|\s)", RegexOptions.Multiline | RegexOptions.CultureInvariant | RegexOptions.Compiled );
为了便于阅读,这里是正则表达式(没有转义序列):
href="(?(?:(?!javascript)(?!#))[a-zA-Z0-9~!@#$%^&*()_-=+\/?.:;',]+)(?|s)
假设您正在开发一个爬虫,您的正则表达式与相对链接不匹配,当我们匹配相对链接时,您不应该匹配以javascript或#(锚点)开头的链接。
在这里你可以看到,我们正在捕获命名组,该组的名称是“URL”。 所以要获取你需要使用的url部分(你可能已经知道):
match.Groups["URL"]
以下是正则表达式的解释:
/// href=" /// [URL]: A named capture group. [(?:(?!javascript)(?!#))[a-zA-Z0-9~!@#$%^&*()_-=+\/?.:;',]+] /// (?:(?!javascript)(?!#))[a-zA-Z0-9~!@#$%^&*()_-=+\/?.:;',]+ /// Match expression but don't capture it. [(?!javascript)(?!#)] /// (?!javascript)(?!#) /// Match if suffix is absent. [javascript] /// javascript /// javascript /// Match if suffix is absent. [#] /// # /// Any character in this class: [a-zA-Z0-9~!@#$%^&*()_-=+\/?.:;',], one or more repetitions /// Match if prefix is absent. [(?:.png|.js|.jpg|.jpeg|.css|.gif|.zip|.rar)] /// Match expression but don't capture it. [.png|.js|.jpg|.jpeg|.css|.gif|.zip|.rar] /// Select from 8 alternatives /// .png /// Literal . /// png /// .js /// Literal . /// js /// .jpg /// Literal . /// jpg /// .jpeg /// Literal . /// jpeg /// .css /// Literal . /// css /// .gif /// Literal . /// gif /// .zip /// Literal . /// zip /// .rar /// Literal . /// rar /// " /// Match expression but don't capture it. [$|>|s] /// Select from 3 alternatives /// End of line or string /// > /// Whitespace ///
这样您就不需要在循环中运行第二个正则表达式。 你会得到绝对和相对的url。
希望能帮助到你…
在你拿到比赛之后我就会这样做(感谢nhahtdh):
上述就是C#学习教程:正则表达式帮助:获取除扩展名.css,.js,.jpg,.gif,.png之外的URL列表分享的全部内容,如果对大家有所用处且需要了解更多关于C#学习教程,希望大家多多关注—计算机技术网(www.ctvol.com)!
foreach (var item in matches) if (!Regex.IsMatch (item.Value, @".(jpg|gif)$")) litResult.Text += item.ToString() + "
";
本文来自网络收集,不代表计算机技术网立场,如涉及侵权请联系管理员删除。
ctvol管理联系方式QQ:251552304
本文章地址:https://www.ctvol.com/cdevelopment/1022454.html