如何在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
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开头和结尾。。因为你没有在代码中定义它,但是给了我们一个简单的正则表达式,你真的不需要逃避引号。好的,谢谢你的建议,我没有在“=”后面加空格,因为目标字符串没有空格。只是注意到了。我的错;)