如何在C#中使用正则表达式提取有用数据?

时间:2011-02-19 04:09:06

标签: c# regex

对不起伙计们,好像我没有清楚地解释我的问题。请允许我再次重新提出我的问题。

  1. 我使用WebClient下载整个网页,我将内容作为字符串

    ” ....... ..... var picArr =“/ d / manhua / naruto / 516 / 1.png | /d/manhua/naruto/516/2.png | /d/manhua/naruto/516/3.png | / d / manhua / naruto / 516 / 4.png | /d/manhua/naruto/516/5.png | /d/manhua/naruto/516/6.png | /d/manhua/naruto/516/7.png | / d /满华/鸣/ 516 / 8.png | /d/manhua/naruto/516/9.png | /d/manhua/naruto/516/10.png | /d/manhua/naruto/516/11.png | / d /张曼华/火影忍者/ 516 / 12.png | /d/manhua/naruto/516/13.png | /d/manhua/naruto/516/14.png | /d/manhua/naruto/516/15.png | / d /满华/鸣/ 516 / 16.png” ...... “;

  2. 在这个内容中,我想只得到一行

    var picArr ="/d/manhua/naruto/516/1.png|/d/manhua/naruto/516/2.png|/d/manhua/naruto/516/3.png|/d/manhua/naruto/516/4.png|/d/manhua/naruto/516/5.png|/d/manhua/naruto/516/6.png|/d/manhua/naruto/516/7.png|/d/manhua/naruto/516/8.png|/d/manhua/naruto/516/9.png|/d/manhua/naruto/516/10.png|/d/manhua/naruto/516/11.png|/d/manhua/naruto/516/12.png|/d/manhua/naruto/516/13.png|/d/manhua/naruto/516/14.png|/d/manhua/naruto/516/15.png|/d/manhua/naruto/516/16.png"
    

    现在我想使用正则表达式获取此字符串并获取picArr的值。

    我的注册表是 var picArr =“([。] *)”

    我认为圆点意味着任何角色。但它不起作用。 :(

    有什么想法吗?

    非常感谢

4 个答案:

答案 0 :(得分:2)

/picArr =\"([^\"]+)\"/

如果我说得对,那就是你需要的。

答案 1 :(得分:1)

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Text.RegularExpressions;

namespace ExtractFileNames
{
    class Program
    {
        static void Main(string[] args)
        {
            string pageData = @"blah blah
var picArr =""/d/manhua/naruto/516/1.png|/d/manhua/naruto/516/2.png|/d/manhua/naruto/516/3.png|/d/manhua/naruto/516/4.png|/d/manhua/naruto/516/5.png|/d/manhua/naruto/516/6.png|/d/manhua/naruto/516/7.png|/d/manhua/naruto/516/8.png|/d/manhua/naruto/516/9.png|/d/manhua/naruto/516/10.png|/d/manhua/naruto/516/11.png|/d/manhua/naruto/516/12.png|/d/manhua/naruto/516/13.png|/d/manhua/naruto/516/14.png|/d/manhua/naruto/516/15.png|/d/manhua/naruto/516/16.png""
more blah decimal blah";

            var match = Regex.Match(pageData, @"var\s+picArr\s*=\s*""(.*?)""");
            var str = match.Groups[1].Value;
            var files = str.Split('|');
            foreach(var f in files)
            {
                Console.WriteLine(f);
            }
            Console.ReadLine();

        }
    }
}

输出:

/d/manhua/naruto/516/1.png
/d/manhua/naruto/516/2.png
/d/manhua/naruto/516/3.png
/d/manhua/naruto/516/4.png
/d/manhua/naruto/516/5.png
/d/manhua/naruto/516/6.png
/d/manhua/naruto/516/7.png
/d/manhua/naruto/516/8.png
/d/manhua/naruto/516/9.png
/d/manhua/naruto/516/10.png
/d/manhua/naruto/516/11.png
/d/manhua/naruto/516/12.png
/d/manhua/naruto/516/13.png
/d/manhua/naruto/516/14.png
/d/manhua/naruto/516/15.png
/d/manhua/naruto/516/16.png

答案 2 :(得分:0)

如果您只想获取文件名,可以在管道上进行拆分:

        var picArr = "/d/manhua/naruto/516/1.png|/d/manhua/naruto/516/2.png|/d/manhua/naruto/516/3.png|/d/manhua/naruto/516/4.png|/d/manhua/naruto/516/5.png|/d/manhua/naruto/516/6.png|/d/manhua/naruto/516/7.png|/d/manhua/naruto/516/8.png|/d/manhua/naruto/516/9.png|/d/manhua/naruto/516/10.png|/d/manhua/naruto/516/11.png|/d/manhua/naruto/516/12.png|/d/manhua/naruto/516/13.png|/d/manhua/naruto/516/14.png|/d/manhua/naruto/516/15.png|/d/manhua/naruto/516/16.png";

        var splitPics = picArr.Split('|');

        foreach (var pic in splitPics)
        {
            Console.WriteLine(pic);
        }

答案 3 :(得分:0)

看起来你想要你的代码片段中的字符串文字的值,“/ d /manhua / naruto / 516 / 1.png | ...”

摆脱方括号。 “”匹配任何字符,没有括号。方括号用于匹配有限的字符集:例如,您使用“[abc]”匹配任何“a”,“b”或“c”。

看起来括号具有逃避“。”的效果,这是我不知道的一个特征(或者在奥陶纪的某个时候忘了)。但是我测试了正则表达式,因为字符串值被一系列点替换,正则表达式匹配。它被视为文字“。”你更有可能尝试与反斜杠转义匹配的字符:“\。”

所以只需摆脱括号,它应该工作。它适用于VS2008。