【发布时间】:2017-03-07 23:16:36
【问题描述】:
所以我有一个 SharePoint 网站,并且我有将新项目提交到 SharePoint 列表中的用户。列表项中的某些字段包含引用文件或图像的 URL,例如"http://host/abc.jpg" 或 "/abc.jpg"。
在另一个字段中,用户编辑可能包含任何标签的 HTML 代码,例如<a href="/abc.jpg">、<img src="/abc.jpg"> 等。
我的目标是查找包含链接/URL 的字段,并提取那些指向具有文件名和扩展名的内容的 URL。我可以使用这两个正则表达式从可能包含一些不相关信息或 URL(和仅 URL)的 SharePoint 字段中提取它:
//this will match full url e.g. http://localhost/path/a.jpg
var fullUrlRegex =
new Regex(@"^https?:\/\/(?:.*)[\.]+(?:[a-z0-9]{1,4})$");
//this will match an absolute path like //test/files to upload/222.jpg
var absolutePathRegex =
new Regex(@"^\/.*[\.]+(?:[a-z0-9]{1,4})$");
var fullUrlRegexMatch = fullUrlRegex.Match(value);
var absolutePathRegexMatch = absolutePathRegex.Match(value);
//now check which one matched and save the value
但是,我不确定如何从用户在另一个字段中输入的 HTML 代码中提取 URL(包括相对 URL 和完整 URL)。
假设这是用户的输入,我需要从该 HTML 代码中提取两个文件的链接。
<p>This is a <a href="/abc.jpg">picture</a>!
And this is a pic too: <img src="/abc.jpg"></p>
标签可以是任何东西,不仅限于<a> 和<img>。我认为可以解决此问题的一种方法是使用 HTML Agility Pack,但这似乎有点矫枉过正。正则表达式搜索src="(match this)" 和href="(match this)" 就足够了吗?有什么我可能会错过的吗?
【问题讨论】:
标签: c# regex parsing html-parsing