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

如何在C#中用正则表达式提取有用的数据?,c#,regex,C#,Regex,对不起,伙计们,我好像没把我的问题解释清楚。请允许我重新措辞我的问题 我使用WebClient下载整个网页,并以字符串形式获取内容 " ....... ..... var picArr=”/4/4/4/4/4/4/4/4/4/4/4/4/4/4/3/4/3/3/3/3/3/3/3/3/3/4/3/3/3/3/3.png/4/4/4/4/4/4/4/4/4/4/5/4/4/4/4/4/4/5/4/4/4/4/4/4/4/4/4/4/4/4/4/4/4/4/4/4/4/4/4/4/4/州州州州HuH

对不起,伙计们,我好像没把我的问题解释清楚。请允许我重新措辞我的问题

  • 我使用WebClient下载整个网页,并以字符串形式获取内容

    " ....... ..... var picArr=”/4/4/4/4/4/4/4/4/4/4/4/4/4/4/3/4/3/3/3/3/3/3/3/3/3/4/3/3/3/3/3.png/4/4/4/4/4/4/4/4/4/4/5/4/4/4/4/4/4/5/4/4/4/4/4/4/4/4/4/4/4/4/4/4/4/4/4/4/4/4/4/4/4/州州州州HuHuHuHuHuHuHuHuHuHuHuHuHuHuHuHuHuHuHuHuHuHuHuHuHuHuHuHuHuHuHuHuHuHuHuHuHuHuHuHuHuHuHuHuHuHuHuHuHuHuHuHua/州州州州/或者或者或者或者或者或者或者或者或者或者或者或者或者或者或者或者或者或者或者或者或者或者或者或者或者或者或者或者或者或者或者6/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 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=“([.]*)”

    我认为点代表任何字符。但它不起作用(

    有什么想法吗

    非常感谢

    /picArr =\"([^\"]+)\"/
    
    如果我做对了,那就是你需要的


    如果我做对了,这就是您需要的。

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

            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);
            }
    

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

            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);
            }
    

    看起来您想要在代码段中输入字符串文字的值,“/d/manhua/naruto/516/1.png |…”

    去掉方括号。“按原样匹配任何字符,不带括号。方括号用于匹配有限的字符集:例如,您可以使用“[abc]”匹配任何“a”、“b”或“c”

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


    所以只要去掉括号就可以了。它在VS2008中对我有效。

    看起来您希望在代码段中输入字符串文字的值,“/d/manhua/naruto/516/1.png |…”

    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();
    
            }
        }
    }
    
    去掉方括号。“按原样匹配任何字符,不带括号。方括号用于匹配有限的字符集:例如,您可以使用“[abc]”匹配任何“a”、“b”或“c”

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

    所以只要去掉括号,它就应该可以工作了。它在VS2008中对我有效

    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
    
    输出:

    /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的值”?该值与您定义的值完全相同,没有任何可“提取”的内容。您的意思是想要文件名吗?
    表示任何字符(换行符除外),但只有当它不在字符类中时。而搜索
    *
    只会返回字符串本身,这是毫无意义的。你考虑过这个问题吗?@Mark,你好,Mark,谢谢你让我的问题变得漂亮:),我不明白你的意思。我的问题是这个picArr在网页上,它不是我的变量。所以在我检索到这个页面的内容后,我想得到一行这样的内容。。。整件事,
    “var picArr=…”在源代码中的某个地方?我以为那是你的密码。那样的话。。。。有十亿种方法可以做到这一点。
    “/dmanhua”`零件是否有变化?
    var
    零件是否发生过变化?如果没有更多的上下文,我们不知道表达式需要多少或“精确”到什么程度。只需补充信息:您可以使用免费工具Expreso()创建正则表达式并对其进行测试。它还可以生成c#或vb.net代码来实现表达式。@kurtnelle,谢谢,我有:)“picArr的值”?该值与您定义的值完全相同,无需“提取”。你是说你想要文件名吗?
    表示任何字符(换行符除外),但仅当它不在字符类中时。搜索
    *
    只会返回字符串本身,这是毫无意义的。你有没有想过?马克,你好,马克,谢谢你让我的问题变得漂亮:),我不明白你的意思。我的问题是这个picArr在网页上,它不是我的变量。所以在我检索到这个页面的内容后,我想得到一行这样的内容。。。整件事,
    “var picArr=…”在源代码中的某个地方?我以为那是你的密码。那样的话。。。。有十亿种方法可以做到这一点。
    “/dmanhua”`零件是否有变化?
    var
    零件是否发生过变化?如果没有更多的上下文,我们不知道表达式需要多少或“精确”到什么程度。只需补充信息:您可以使用免费工具Expreso()创建正则表达式并对其进行测试。它还可以生成c#或vb.net代码来实现表达式。@kurtnelle,谢谢,我有它:)不过你不会把
    /
    放在c的开头和结尾。。因为你没有在代码中定义它,但是给了我们一个简单的正则表达式,你真的不需要逃避引号。好的,谢谢你的建议,我没有在“=”后面加空格,因为目标字符串没有空格。只是注意到了。我的错;)不管怎样,我还是会支持你的。不过,你不会把
    /
    放在C开头和结尾。。因为你没有在代码中定义它,但是给了我们一个简单的正则表达式,你真的不需要逃避引号。好的,谢谢你的建议,我没有在“=”后面加空格,因为目标字符串没有空格。只是注意到了。我的错;)