2011-04-20 79 views
1

i have <A HREF="f110111.ZIP"> and f110111 - is an arbitrary char sequence. I need C# regex match expression to extract all above.幫助正則表達式。需要提取`<A HREF`

E. g. input is

<A HREF="f110111.ZIP"><A HREF="qqq.ZIP"><A HREF="gygu.ZIP">

I want the list:

  • f110111.ZIP
  • qqq.ZIP
  • gygu.ZIP
+0

http://stackoverflow.com/a/1732454/62576 – 2016-04-07 03:11:24

回答

0

NO NO! Do not use Regex to parse HTML!

嘗試XML解析器。或者XPath也許。

+0

否否號解析一個完整的HTML文檔,這是** **瘋狂的資本C. – vbence 2011-04-20 07:56:30

+0

@vbence:足夠了:)但是OP沒有指定有多少鏈接。無論如何,你最終會因使用RegEx來匹配所有可能的場景而感到沮喪。 – 2011-04-20 07:59:00

+0

我可以想到使用正則表達式比使用DOM樹更強大的情況(例如,如果鏈接不在統一的位置)。這正是Regex的目標。使用正確的工具來完成正確的工作。 – 2011-04-20 08:08:15

3

你需要的是htmlagility pack/!這將允許您以簡單的方式閱讀HTML並提供一種簡單的方法來檢索鏈接。

+0

當你完全知道你想要什麼時,爲什麼要解析一個完整的html頁面?我認爲這個問題有點矯枉過正。 – 321X 2011-04-20 08:42:39

2

如果你可以在文件名多點:

<A HREF="(^["]+?).zip 

如果你沒有點中的文件名(只是一個zip之前),您可以使用更快的一個:

<A HREF="(^[".]+) 

C#例如:

Pattern pattern = Pattern.compile("<A HREF=\"(^[\"]+?).zip"); 

Matcher matcher = pattern.matcher(buffer); 
while (matcher.find()) { 
    // do something with: matcher.group(1) 
} 
0

嘗試這一個:

/<a href="([^">]+.ZIP)/gi 
0

我認爲正則表達式是從給定文本中過濾文本的好方法。

這個正則表達式從給定的文本中獲取文件,文件名和擴展名。

href="(?<File>(?<Filename>.*?)(?<Ext>\.\w{1,3}))" 

上述正則表達式預計存在出單詞字符A-Z A-Z 0-9,1個3個字符之間的延伸。

C#代碼示例:

string regex = "href=\"(?<File>(?<Filename>.*?)(?<Ext>\\.\\w{1,3}))\""; 
RegexOptions options = ((RegexOptions.IgnorePatternWhitespace | RegexOptions.Multiline) | RegexOptions.IgnoreCase); 
Regex reg = new Regex(regex, options);