如何用正则表达式,提取内容

yuxh81 2011-09-05 12:33:33

var financeData = new Array();
var wholidayData = new Array();
var calendarConData = new Array();
financeData[0]="欧元#国际货币基金组织在第六笔救助资金拨款前,就希腊表现评估作出结论#2011-09-05#2011-09-05 12:15"
financeData[1]="欧元#葡萄牙央行将公布该国银行从欧洲央行借贷资金的统计数据#2011-09-05#2011-09-05 12:15"
wholidayData[0]="加元#劳动节 市场休市#2011-9-5 0:00:00#2011-9-5 12:15:35"
wholidayData[1]="美元#劳动节 市场休市#2011-9-5 0:00:00#2011-9-5 12:15:35"
calendarConData[0]="07:30:00#澳大利亚8月AiG服务业表现指数#M#48.8##52.1#2011-09-05 12:15#2011-09-05 07:30"
calendarConData[1]="08:30:00#澳大利亚8月TD通胀年率#M#3.2%##2.9%#2011-09-05 12:15#2011-09-05 08:30"
calendarConData[2]="08:30:00#澳大利亚8月TD通胀月率#L#0.3%##-0.1%#2011-09-05 12:15#2011-09-05 08:30"
calendarConData[3]="09:30:00#澳大利亚第二季度企业运营利润季率#L#-2.0%##6.7%#2011-09-05 12:15#2011-09-05 09:30"
calendarConData[4]="09:30:00#澳大利亚第二季度商业库存季率#L#0.4%##2.5%#2011-09-05 12:15#2011-09-05 09:30"
calendarConData[5]="10:30:00#中国8月服务业采购经理人指数#L#53.5##50.6#2011-09-05 12:15#2011-09-05 10:30"
calendarConData[6]="15:43:00#意大利8月服务业采购经理人指数#L#48.6###2011-09-05 12:15#2011-09-05 15:43"
calendarConData[7]="15:48:00#法国8月服务业采购经理人指数终值#L#56.1###2011-09-05 12:15#2011-09-05 15:48"
calendarConData[8]="15:53:00#德国8月服务业采购经理人指数终值#M#50.4###2011-09-05 12:15#2011-09-05 15:53"
calendarConData[9]="15:58:00#欧元区8月服务业采购经理人指数终值#M#51.5###2011-09-05 12:15#2011-09-05 15:58"
calendarConData[10]="15:58:00#欧元区8月综合采购经理人指数终值#M#51.1###2011-09-05 12:15#2011-09-05 15:58"
calendarConData[11]="16:28:00#英国8月服务业采购经理人指数#M#55.4###2011-09-05 12:15#2011-09-05 16:28"
calendarConData[12]="16:30:00#欧元区9月Sentix投资者信心指数#M#-13.5###2011-09-05 12:15#2011-09-05 16:30"
calendarConData[13]="17:00:00#欧元区7月零售销售月率#M#0.9%###2011-09-05 12:15#2011-09-05 17:00"
calendarConData[14]="17:00:00#欧元区7月零售销售年率#M#-0.4%###2011-09-05 12:15#2011-09-05 17:00"
Loader.ShowData(financeData, wholidayData, calendarConData)


如题,我想从上面的内容中分别提取出数组:financeData、wholidayData、calendarConData内容(双引号中的内容)
注意数组长度不定,谢谢!


...全文
163 17 打赏 收藏 转发到动态 举报
写回复
用AI写文章
17 条回复
切换为时间正序
请发表友善的回复…
发表回复
萧炎 2011-09-05
  • 打赏
  • 举报
回复
黄老师呢?
SeanDing1989 2011-09-05
  • 打赏
  • 举报
回复
你循环一下三个Array。声明三个数组。遍历赋值。

string[] a;
for(int i=0;i< financeData.length;i++)
{
a[i] = financeData[i];
]
yuxh81 2011-09-05
  • 打赏
  • 举报
回复
是的

注意是后台处理

我要把这三个提取出来放到三个字符串数组中
子夜__ 2011-09-05
  • 打赏
  • 举报
回复
直接输出3个数组的值?
yuxh81 2011-09-05
  • 打赏
  • 举报
回复
嗯,谢谢了。。。
遥望那些年 2011-09-05
  • 打赏
  • 举报
回复
如果你的文本里面,能够保证每行只有一个赋值语句的话,正则改成
@"(?m)(?<paramName>\w+)\[\d+\]\s*=\s*""(?<paramValue>.+)"""
会好点,这样可以避免类似\"的转义字符
yuxh81 2011-09-05
  • 打赏
  • 举报
回复
明白了,谢谢各位!
遥望那些年 2011-09-05
  • 打赏
  • 举报
回复
[Quote=引用 12 楼 yuxh81 的回复:]

纠结啊,正则看不懂。。。

这样问一下,如果用正则取出 calendarConData的15个值

07:30:00#澳大利亚8月AiG服务业表现指数#M#48.8##52.1#2011-09-05 12:15#2011-09-05 07:30
08:30:00#澳大利亚8月TD通胀年率#M#3.2%##2.9%#2011-09-05 12:15#2011-09-05 08:30
0……
[/Quote]

string str = @"var financeData = new Array();
var wholidayData = new Array();
var calendarConData = new Array();
financeData[0]=""欧元#国际货币基金组织在第六笔救助资金拨款前,就希腊表现评估作出结论#2011-09-05#2011-09-05 12:15""
financeData[1]=""欧元#葡萄牙央行将公布该国银行从欧洲央行借贷资金的统计数据#2011-09-05#2011-09-05 12:15""
wholidayData[0]=""加元#劳动节 市场休市#2011-9-5 0:00:00#2011-9-5 12:15:35""
wholidayData[1]=""美元#劳动节 市场休市#2011-9-5 0:00:00#2011-9-5 12:15:35""
calendarConData[0]=""07:30:00#澳大利亚8月AiG服务业表现指数#M#48.8##52.1#2011-09-05 12:15#2011-09-05 07:30""
calendarConData[1]=""08:30:00#澳大利亚8月TD通胀年率#M#3.2%##2.9%#2011-09-05 12:15#2011-09-05 08:30""
calendarConData[2]=""08:30:00#澳大利亚8月TD通胀月率#L#0.3%##-0.1%#2011-09-05 12:15#2011-09-05 08:30""
calendarConData[3]=""09:30:00#澳大利亚第二季度企业运营利润季率#L#-2.0%##6.7%#2011-09-05 12:15#2011-09-05 09:30""
calendarConData[4]=""09:30:00#澳大利亚第二季度商业库存季率#L#0.4%##2.5%#2011-09-05 12:15#2011-09-05 09:30""
calendarConData[5]=""10:30:00#中国8月服务业采购经理人指数#L#53.5##50.6#2011-09-05 12:15#2011-09-05 10:30""
calendarConData[6]=""15:43:00#意大利8月服务业采购经理人指数#L#48.6###2011-09-05 12:15#2011-09-05 15:43""
calendarConData[7]=""15:48:00#法国8月服务业采购经理人指数终值#L#56.1###2011-09-05 12:15#2011-09-05 15:48""
calendarConData[8]=""15:53:00#德国8月服务业采购经理人指数终值#M#50.4###2011-09-05 12:15#2011-09-05 15:53""
calendarConData[9]=""15:58:00#欧元区8月服务业采购经理人指数终值#M#51.5###2011-09-05 12:15#2011-09-05 15:58""
calendarConData[10]=""15:58:00#欧元区8月综合采购经理人指数终值#M#51.1###2011-09-05 12:15#2011-09-05 15:58""
calendarConData[11]=""16:28:00#英国8月服务业采购经理人指数#M#55.4###2011-09-05 12:15#2011-09-05 16:28""
calendarConData[12]=""16:30:00#欧元区9月Sentix投资者信心指数#M#-13.5###2011-09-05 12:15#2011-09-05 16:30""
calendarConData[13]=""17:00:00#欧元区7月零售销售月率#M#0.9%###2011-09-05 12:15#2011-09-05 17:00""
calendarConData[14]=""17:00:00#欧元区7月零售销售年率#M#-0.4%###2011-09-05 12:15#2011-09-05 17:00""
Loader.ShowData(financeData, wholidayData, calendarConData)";

Regex reg = new Regex(@"(?s)(?<paramName>\w+)\[\d+\]\s*=\s*""(?<paramValue>[^""]+)""");

foreach (Match m in reg.Matches(str))
{
if (m.Groups["paramName"].Value == "calendarConData")
Console.WriteLine(m.Groups["paramValue"]);
}
  • 打赏
  • 举报
回复
那个方法改为返回一个Dictionry<string, List<string>>的字典好用一点
yuxh81 2011-09-05
  • 打赏
  • 举报
回复
纠结啊,正则看不懂。。。

这样问一下,如果用正则取出 calendarConData的15个值

07:30:00#澳大利亚8月AiG服务业表现指数#M#48.8##52.1#2011-09-05 12:15#2011-09-05 07:30
08:30:00#澳大利亚8月TD通胀年率#M#3.2%##2.9%#2011-09-05 12:15#2011-09-05 08:30
08:30:00#澳大利亚8月TD通胀月率#L#0.3%##-0.1%#2011-09-05 12:15#2011-09-05 08:30
...

sy527205079 2011-09-05
  • 打赏
  • 举报
回复
paramValue 肯定是后面 引号里的值啊 paramName 才是 financeData、wholidayData、calendarConData *""(?<paramValue>[^""]+)""") m.Groups["paramValue"]
是表示 括号里 正则匹配的值
遥望那些年 2011-09-05
  • 打赏
  • 举报
回复
[Quote=引用 9 楼 yuxh81 的回复:]

上面有两个误解了我的意思,我是要在后台从字符串中提取内容,7楼的理解是对的,但是
不明白paramValue给什么值??

是 financeData、wholidayData、calendarConData 吗?
[/Quote]

你运行输出一下不就能看出结果了么,
m.Groups["paramName"]里面保存了数组变量的名字,比如financeData,wholidayData
m.Groups["paramValue"]里面保存了具体内容,就是你要的引号里面的东西
yuxh81 2011-09-05
  • 打赏
  • 举报
回复
上面有两个误解了我的意思,我是要在后台从字符串中提取内容,7楼的理解是对的,但是
不明白paramValue给什么值??

是 financeData、wholidayData、calendarConData 吗?

  • 打赏
  • 举报
回复

public static List<string> GetArrayContent(string arrayName)
{
List<string> result = new List<string>();
foreach (Match m in Regex.Matches(input, string.Format(@"(?im){0}\[\d+\]=""(?<data>.*)""\s*$", arrayName)))
{
//Console.WriteLine(m.Groups["data"].Value);
result.Add(m.Groups["data"].Value);
}
return result;
}

//调用
var array1 = GetArrayContent("financeData");
/*
欧元#国际货币基金组织在第六笔救助资金拨款前,就希腊表现评估作出结论#2011-09-05#20
11-09-05 12:15
欧元#葡萄牙央行将公布该国银行从欧洲央行借贷资金的统计数据#2011-09-05#2011-09-05
12:15
请按任意键继续. . .
*/
遥望那些年 2011-09-05
  • 打赏
  • 举报
回复

string str=@"var financeData = new Array();
var wholidayData = new Array();
var calendarConData = new Array();
financeData[0]=""欧元#国际货币基金组织在第六笔救助资金拨款前,就希腊表现评估作出结论#2011-09-05#2011-09-05 12:15""
financeData[1]=""欧元#葡萄牙央行将公布该国银行从欧洲央行借贷资金的统计数据#2011-09-05#2011-09-05 12:15""
wholidayData[0]=""加元#劳动节 市场休市#2011-9-5 0:00:00#2011-9-5 12:15:35""
wholidayData[1]=""美元#劳动节 市场休市#2011-9-5 0:00:00#2011-9-5 12:15:35""
calendarConData[0]=""07:30:00#澳大利亚8月AiG服务业表现指数#M#48.8##52.1#2011-09-05 12:15#2011-09-05 07:30""
calendarConData[1]=""08:30:00#澳大利亚8月TD通胀年率#M#3.2%##2.9%#2011-09-05 12:15#2011-09-05 08:30""
calendarConData[2]=""08:30:00#澳大利亚8月TD通胀月率#L#0.3%##-0.1%#2011-09-05 12:15#2011-09-05 08:30""
calendarConData[3]=""09:30:00#澳大利亚第二季度企业运营利润季率#L#-2.0%##6.7%#2011-09-05 12:15#2011-09-05 09:30""
calendarConData[4]=""09:30:00#澳大利亚第二季度商业库存季率#L#0.4%##2.5%#2011-09-05 12:15#2011-09-05 09:30""
calendarConData[5]=""10:30:00#中国8月服务业采购经理人指数#L#53.5##50.6#2011-09-05 12:15#2011-09-05 10:30""
calendarConData[6]=""15:43:00#意大利8月服务业采购经理人指数#L#48.6###2011-09-05 12:15#2011-09-05 15:43""
calendarConData[7]=""15:48:00#法国8月服务业采购经理人指数终值#L#56.1###2011-09-05 12:15#2011-09-05 15:48""
calendarConData[8]=""15:53:00#德国8月服务业采购经理人指数终值#M#50.4###2011-09-05 12:15#2011-09-05 15:53""
calendarConData[9]=""15:58:00#欧元区8月服务业采购经理人指数终值#M#51.5###2011-09-05 12:15#2011-09-05 15:58""
calendarConData[10]=""15:58:00#欧元区8月综合采购经理人指数终值#M#51.1###2011-09-05 12:15#2011-09-05 15:58""
calendarConData[11]=""16:28:00#英国8月服务业采购经理人指数#M#55.4###2011-09-05 12:15#2011-09-05 16:28""
calendarConData[12]=""16:30:00#欧元区9月Sentix投资者信心指数#M#-13.5###2011-09-05 12:15#2011-09-05 16:30""
calendarConData[13]=""17:00:00#欧元区7月零售销售月率#M#0.9%###2011-09-05 12:15#2011-09-05 17:00""
calendarConData[14]=""17:00:00#欧元区7月零售销售年率#M#-0.4%###2011-09-05 12:15#2011-09-05 17:00""
Loader.ShowData(financeData, wholidayData, calendarConData)";

Regex reg = new Regex(@"(?s)(?<paramName>\w+)\[\d+\]\s*=\s*""(?<paramValue>[^""]+)""");

foreach (Match m in reg.Matches(str))
Console.WriteLine(m.Groups["paramName"] + " " + m.Groups["paramValue"]);


m.Groups["paramValue"]就是了
萧炎 2011-09-05
  • 打赏
  • 举报
回复
[Quote=引用 5 楼 zyloveyrf 的回复:]
LZ我才看清你的题目==

string str;
for(int i=0;i< financeData.length;i++)
{
str = financeData[i]+",";
]

for(int j=0;j<wholidayData.leng;j++)
{
str[i]+=wholidayData[j]+",";
}
for(int k=0;j<cale……
[/Quote]

sorry LZ第一个for循环写错了 应该是str+=financeData[i]+",";
萧炎 2011-09-05
  • 打赏
  • 举报
回复
LZ我才看清你的题目==

string str;
for(int i=0;i< financeData.length;i++)
{
str = financeData[i]+",";
]

for(int j=0;j<wholidayData.leng;j++)
{
str[i]+=wholidayData[j]+",";
}
for(int k=0;j<calendarConData.leng;k++)
{
str[i]+=calendarConData[k]+",";
}
string[] strArry=str.split(',');

62,046

社区成员

发帖
与我相关
我的任务
社区描述
.NET技术交流专区
javascript云原生 企业社区
社区管理员
  • ASP.NET
  • .Net开发者社区
  • R小R
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告

.NET 社区是一个围绕开源 .NET 的开放、热情、创新、包容的技术社区。社区致力于为广大 .NET 爱好者提供一个良好的知识共享、协同互助的 .NET 技术交流环境。我们尊重不同意见,支持健康理性的辩论和互动,反对歧视和攻击。

希望和大家一起共同营造一个活跃、友好的社区氛围。

试试用AI创作助手写篇文章吧