【发布时间】:2012-10-02 22:18:37
【问题描述】:
使用正则表达式我想提取包含在某些 HTML 文本中的文件或图像的所有链接。尝试了几个示例,但由于多种原因都失败了(主要是我不擅长正则表达式:))
1) 首先我试过这个:
> Regex("<img[^>]+src=[""']([^""']+)[""']", RegexOptions.Singleline Or
> RegexOptions.IgnoreCase)
(它适用于图像)
2) 然后这个:
Regex("href=[""']([^""']+)[""']", RegexOptions.Singleline Or RegexOptions.IgnoreCase)
1) 提取所有图像,它工作正常,但这只是部分解决方案。 2)提取所有href =“asdf”,但我只想提取指向文件的href,我不想要锚(#middlesection)或.aspx甚至没有像href =“www.google.com/site”这样的扩展名的url
我想知道如何从给定文本中提取所有文件,作为一个文件,任何以点和三个字符结尾的链接:)
我对“.aspx”或“.html”不感兴趣,对“id_content=99”这样的无扩展网址也不感兴趣,对“#anchor123”这样的锚也不感兴趣。
是否可以将其打包到一个 RegExp 中?这一切背后的想法是,我必须将某些 HTML 中引用的每个文件从一个地方复制到另一个地方,因此我需要一个仅包含要复制的文件路径的 ArrayList。
提前致谢!
添加了一些示例代码,只是为了澄清这与“狂野”的 html 无关
给出这个代码:
<p>This is a paragraph</p>
<br>
<a href="#someplace">Go to someplace</a>
<ul>
<li><p><a href="../files/document.pdf">Important PDF 1</a></p></li>
<li><p><a href="../files/document.xls">Important XLS</a></p></li>
</ul>
<a href="content.aspx?id_content=55">Go to content 55</a>
<br>
<img src="../images/nicelogo.jpg">
我想得到这个:
"../files/document.pdf"
"../files/document.xls"
"../images/nicelogo.jpg"
我不想得到这个:
"#someplace"
"content.aspx?id_content=55"
就是这样,有了我拥有的 reg exp,我得到了所有的链接,我只想要那些代表文件的链接。 HTML 是我手写的(长篇大论),所以不会出现奇怪的双双引号或格式错误的标签或奇怪的字符。
我知道它可以做到,因为它几乎完成了,我只是不知道如何告诉我“只给我最后有“.something”的匹配项是“something”一个三个字符长的字符串”。我清楚了吗? :)
【问题讨论】:
-
我知道 RegExp 不是完美的解决方案,但在这种情况下,它与 HTML 无关。我自己编写 HTML,我知道会有 src="../files/image.jpg" 或 href="../files/document.pdf" 这就是我想要提取的链接类型,很简单英语表达式将是:在 src= 或 href= 之后给我那些以点和三个字母结尾的链接(我对文件的定义),忽略其他所有内容:) 我可以完成其中的一部分,我错过了“结束于. 和三个字母”,因为缺乏 RegExp 知识
-
你读过链接的答案吗?????
-
是的,我已经阅读了从 Fermat 参考到 HTML Agility Pack 的所有内容(我拒绝链接到我的项目,因为我知道适当的正则表达式可以完成这项工作)。当我说这不是“狂野”的 HTML 而是我自己编写的代码,没有奇怪的字符和有趣的符号时,你有没有读过这部分 :) 再次,我可以捕获 href= 或 src= 引号之间的文本,所有我想要只保留以点和三个字母结尾的文件,即(在我自己控制的 html-not-in-the-wild-world 中)一个文件。
-
看,这里的问题是你在自相矛盾。如果使用正则表达式很容易做你想做的事,那你为什么要寻求帮助?