我有一個包含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很長,那麼字符掃描方法會更快。像狀態機一樣,它應該很乾淨。但是,直到性能問題,使用正則表達式。 –