繁体   English   中英

我需要一个正则表达式来获取img标签的src属性

[英]I need a regex to get the src attribute of an img tag

我有如下字面上的字符串:

"lt;img src=quot;http://www.news.gov.tt/thumbnail.php?file=Hon__Jerry_Narace_Minister__Of_Health_599152837.jpgamp;size=summary_mediumquot;gt;lt;pgt;Fifty-eight people have been tested for Influenza A/H1N1 virus, commonly called swine flu, in Trinidad and Tobago. \r\nThe tests have all come back negative, Health Minister Jerry Narace said yesterday. \r\n\r\n"

我想获得“”之间的网址 字符串,即

http://www.news.gov.tt/thumbnail.php?file=Hon__Jerry_Narace_Minister__Of_Health_599152837.jpgamp;size=summary_medium

在.NET中使用正则表达式。

有任何想法吗?

Regex r = new Regex("(?<=img src=&quot;).*?(?=&quot;)");

假定没有任何“&”号隐藏在某处,应该为您解决问题。

编辑:发布此答案后,我注意到以前在您的字符串中看到的&符号不再存在。

这个正则表达式可以使您精简到获取IMG标签的src内容:

(?<=<img.*?src=\&quot;)[^\"]*(?=\&quot;.*?((&frasl;&gt;)|(&gt;.*&lt&frasl;img&gt;)))

它不依赖于标签内的位置或src,但确实需要将区分大小写设置为不敏感才能保持稳定。

Patjbs版本将抓住您所有标签的src,如果您解析包含外部内容(例如javascript,外部div内容等)中链接的html,则会导致不稳定。

string htmlString = @"<img id="tagId" src="myTagSource.gif" name="imageName" />";
string matchString = Regex.Match(htmlString, @"(?<=<img.*?src=\")[^\"]*(?=\".*?((/>)|(>.*</img)))").Value;

matchString现在等于“ myTagSource.gif”

我注意到您的输入字符串缺少一些&(“&”号)来表示转义字符,例如“ 将无法(无需强制逻辑寻找“ lt; gt;”)以编程方式解释这些字符。 您将不得不对初始字符串进行替换,以将其转换为可解释的正则表达式[这是一个单词吗?]字符串。

因此,假设您从页面中获取了所有这些字符串,则需要假定lt的所有实例; 成为<和所有gt; 成为>,全部 成为“。

您也不能假设提供的数据将始终以这种形式返回,有时字符串可能包含其他标签信息(id,名称,边框信息等)。 因此,我认为也许最意识形态和最可维护的解决方案在这里可能会稍有不同。 最理想的方法是在一个解析中进行操作,但最易于维护的操作可能是分两个步骤进行操作,首先将输入字符串转换为标准html字符串,然后第二步提取源数据。

另外,您可以在一个解析中完成此操作,将我模式中的html构造替换为相应的字符替换(假设它们使用的是标准编码,但删除了&符),尽管它的可读性不佳,并且可能引起一些混乱给维护代码的任何人:

(?<= lt; img。?src = \\“)。 ?(= \\ QUOT; *((frasl; GT;??)|(GT * LT; frasl; imggt;)))

编辑:如果事实证明,他们正在使用标准编码, 只是还没有提供与你的榜样,那么您可以在第一图案刚子我提出参考使用解码网址:

string MatchValue = Regex.Match(HttpUtility.UrlDecode(inputString), pattern).Value;

这会将您从它们返回的字符串解码为标准字符串,用正确的字符替换转义的字符,然后运行相同的模式。

^\"lt;img\s+src\=quot;(.+)quot;

给出以下输入:

"lt;img src=quot;http://www.news.gov.tt/thumbnail.php?file=Hon__Jerry_Narace_Minister__Of_Health_599152837.jpgamp;size=summary_mediumquot;gt;lt;pgt;Fifty-eight people have been tested for Influenza A/H1N1 virus, commonly called swine flu, in Trinidad and Tobago. \r\nThe tests have all come back negative, Health Minister Jerry Narace said yesterday. \r\n\r\n"

此正则表达式返回以下内容:

http://www.news.gov.tt/thumbnail.php?file=Hon__Jerry_Narace_Minister__Of_Health_599152837.jpgamp;size=summary_medium

我相信正是您所需要的。

希望这会有所帮助,瑞安

正则表达式从根本上不利于解析HTML(请参阅您能否提供一些示例,以了解为什么很难用正则表达式来解析XML和HTML? )。 您需要一个HTML解析器。 请参见您能否提供一个使用您喜欢的解析器解析HTML的示例? 例如使用各种解析器的示例。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM