我有一个包含html的字符串输入缓冲区。 这个html包含了很多文字,包括一些我想要解析的东西。 什么实际上,我所寻找的是这样的台词: “< STRONG>文件名</STRONG>:yadayada.thisandthat.doc </P>”c#:从html解析文本
(虽然位置和空白的量/分号是可变的)
什么是将所有文件名列入列表的最佳方式< string>?
我有一个包含html的字符串输入缓冲区。 这个html包含了很多文字,包括一些我想要解析的东西。 什么实际上,我所寻找的是这样的台词: “< STRONG>文件名</STRONG>:yadayada.thisandthat.doc </P>”c#:从html解析文本
(虽然位置和空白的量/分号是可变的)
什么是将所有文件名列入列表的最佳方式< string>?
我不知道正则表达式是做到这一点的最好办法,遍历HTML树可能是比较明智的,但下面的正则表达式应该这样做:
<\s*strong\s*>\s*Filename\s*<\s*/strong\s*>[\s:]*([^<]+)<\s*/p\s*>
正如你所看到的,我一直非常容忍空白,并且容忍文件名的内容。此外,还允许使用多个(或不包含)分号。
的C#建立一个清单(把我的头顶部):
List<String> fileNames = new List<String>();
Regex regexObj = new Regex(@"<\s*strong\s*>\s*Filename\s*<\s*/strong\s*>[\s:]*([^<]+)<\s*/p\s*>", RegexOptions.IgnoreCase);
Match matchResults = regexObj.Match(subjectString);
while (matchResults.Success) {
fileNames.Add(matchResults.Groups[0].Value);
matchResults = matchResults.NextMatch();
}
非常感谢!我一回家就会放弃! – Pygmy
您有几个选项。你可以使用正则表达式,它可能类似于Filename:(。*?)</p>,但它需要更加复杂。您需要查看更多的文本文件以编写适当的文本文件。这可能取决于你的所有文本的结构,如果文件名后总是有特定的标签。
如果它是有效的HTML,您还可以使用HTML解析器(如HTML Agility Pack)来浏览html并从某些标记中拉出文本,然后使用正则表达式分离出路径。
+1。它非常强大。 – Mikos
正则表达式是(可能最快)的选项。我在正则表达式很糟糕,所以有人可能会发布正则表达式解决方案:) – RvdK
@PoweRoy正则表达式是编写代码最快的,但不是查找字符串。如果速度很重要并且html很长,那么字符扫描方法会更快。像状态机一样,它应该很干净。但是,直到性能问题,使用正则表达式。 –