我的字符串符合字面:
"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中使用正则表达式。
有什么想法吗?
答案 0 :(得分:2)
Regex r = new Regex("(?<=img src=").*?(?=")");
应该为你做的伎俩,假设某个地方没有任何&符号。
编辑:在发布这个答案后,我注意到我之前在你的字符串中看到的&符号已不复存在。
答案 1 :(得分:1)
这个正则表达式应该让你解决只是 IMG标签的src内容:
(?<=<img.*?src=\")[^\"]*(?=\".*?((⁄>)|(>.*<⁄img>)))
它不依赖于标记中的定位或src,它确实要求您将区分大小写设置为不敏感以保持稳定。
Patjbs版本会抓住你所有标签的src,如果你正在解析包含外部内容链接的html,这会导致不稳定 - 例如javascript,外部div内容等。
string htmlString = @"<img id="tagId" src="myTagSource.gif" name="imageName" />";
string matchString = Regex.Match(htmlString, @"(?<=<img.*?src=\")[^\"]*(?=\".*?((/>)|(>.*</img)))").Value;
matchString现在等于“myTagSource.gif”
我注意到你的输入字符串遗漏了一些&amp; (&符号)表示逃避字符,如“没有办法(不强迫逻辑寻找“lt; gt;)以编程方式解释这些字符。您必须对初始字符串执行替换以将其转换为正则表达式可解释[是一个单词?]字符串。
因此,假设您从页面中获取所有这些字符串,您需要假设所有实例都是lt;成为&lt;和所有GT;成为&gt;,全部成为“。
您也不能假设所提供的数据始终以此形式返回,有时字符串可能包含其他标记信息(ID,名称,边框信息等)。所以我认为也许最具意识形态和最易维护的解决方案可能略有不同。最意识形态的方法是在一个解析中完成它,但最友好的维护可能是分两步完成,首先将输入字符串转换为标准的html字符串,第二步提取源数据。
或者,您可以在一个解析中执行此操作,将我的模式中的html构造替换为相应的字符替换(假设他们使用的是标准编码,但丢弃了&符号),但是,它不是非常可读,并且可能会对维护代码的任何人造成一些混淆:
(= \ QUOT; *((frasl; GT;(小于= LT; IMG SRC = \ QUOT??)。???)|(GT * LT; frasl; imggt;)))
编辑如果事实证明他们 使用标准编码而你就没有提供&amp;在你的例子中,你可以在第一个模式中使用:
引用解码的URLstring MatchValue = Regex.Match(HttpUtility.UrlDecode(inputString), pattern).Value;
这会将您从它们返回的字符串解码为标准字符串,用正确的字符替换转义字符,然后运行相同的模式。
答案 2 :(得分:1)
^\"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
我认为这正是你所需要的。
希望这有帮助, 莱恩
答案 3 :(得分:0)
正则表达式在解析HTML方面根本不好(请参阅Can you provide some examples of why it is hard to parse XML and HTML with a regex?了解原因)。你需要的是一个HTML解析器。有关使用各种解析器的示例,请参阅Can you provide an example of parsing HTML with your favorite parser?。