2011-04-20 122 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);