在.NET中使用正则表达式对太平洋产品参数进行分析!

目前在做的项目是一个类似于太平洋的产品报价系统(其实说白了就是一个仿太平洋的网站,产品数据全是摘录自太平洋),产品的参数分参数分类(主要参数、性能参数...),参数名称(型号、芯片组、CPU接口...),数据库里已经录好了产品的参数分类及参数名称,目前正在对着太平洋的产品库进行产品的参数录入,之前都是复制一个参数值了再粘贴到我们的网站里然后点击确定了进行参数录入的,某天觉得这种方法蛮麻烦,几万种产品的要录参数到什么时候啊,于是自己看了下太平洋的产品参数,如下图:
[img]http://niunan.iteye.com/upload/picture/pic/23789/d85c77f0-df6a-37b4-8fe4-c29461921466.jpg[/img]
好像没发觉什么特别的地方,然后自己如下图的方式一次性把参数全复制了粘贴到记事本里,
[img]http://niunan.iteye.com/upload/picture/pic/23787/035cbf06-d51d-3e82-a472-6678b4108920.jpg[/img]
[img]http://niunan.iteye.com/upload/picture/pic/23785/29e02c32-bf88-31ec-868e-2e3c1874e08b.jpg[/img]
呵呵,发觉什么了没,每条参数名称和参数值占一行,而且他们之间都是用空格格开的,(大部分是),这样的话我们可以通过一些字符串的处理,以空格为分界符把参数名称和参数值拆开,这样就得到最后我们所要的结果了,就能批量的把参数值插入到数据库里了。
试了一下用普通的字符串处理,觉得蛮麻烦的,于是就想到了正则表达式,也正好借此机会试试.NET中如何使用正则表达式吧,先把正则表达式写出来吧。最近从网上无意中找到的一个验证正则表达式的好软件(RegexBuddy),个人觉得蛮好用的,打开后界面如下:
[img]http://niunan.iteye.com/upload/picture/pic/23791/685ee524-646d-3c26-a8db-21a6f103fe39.jpg[/img]
注意画圈圈的那三个按钮,分配是 匹配、替换、分割,我们要用到的是替换按钮
点击Replace 和 Test 按钮,然后输入正则表达式及粘贴复制出来的参数名称及参数值,瑞在Test按钮上面那个框框里输入 $1 → $2 ,如下图:
[img]http://niunan.iteye.com/upload/picture/pic/23803/def11fe1-35a6-3efa-b045-9206dc51054e.jpg[/img]
熟悉正则的朋友应该知道,(.+) (.+)匹配 1个以上的任意字符后有个空格,空格之后再有1个以上的任意字符,加上括号是给匹配的结果进行分组$1和$2就表示第一组和第二组,下面的测试参数会变色就说明匹配我们写的正则表达式,每个匹配的结果用不同的颜色相隔表示,上面表示每一行都匹配我们写的正则表达式,然后我们如下图按下那个按钮,
[img]http://niunan.iteye.com/upload/picture/pic/23801/9a9bb941-1515-30df-8413-73164153a29e.jpg[/img]
得到下图结果
[img]http://niunan.iteye.com/upload/picture/pic/23797/8b7dd9a6-3864-35b6-9293-c338f6c6b9d3.jpg[/img]
大家看到什么了,匹配出来了吧,不过有点不对劲,我们要的是把第一个空格之前的分为第一组,而匹配的结果却是把最后一个空格之前的分为第一组了,这就是正则表达式[color=blue]贪婪匹配与懒惰匹配[/color]的区别,下图是我改了正则表达式之后匹配的结果,注意我把 PCI Express插槽 改成 PCI-Express插槽 ,把空格换成一个减号,这样才不至于替换后的结果是PCI → *****。
[img]http://niunan.iteye.com/upload/picture/pic/23807/e55e4b58-4522-3fd1-9d96-7a441fcc3cf9.jpg[/img]
这样就得到了我们想要的结果,至于那个 PCI-Express插槽 ,我能想到的方法也只能是在更新数据库的时候判断一下,如果参数名称是 PCI-Express插槽 ,则更新数据库中 字段为 PCI Express插槽 的参数值。
既然正则表达式写出来了,那下面就来做ASPX页面的代码编写,在这里我只是把分析出的结果输出到界面上,新建ASPX页面,拉入一个文本框,一个按钮,一个标签,如图:
[img]http://niunan.iteye.com/upload/picture/pic/23811/d86bf579-062d-3cf8-be7c-64e09f14713d.jpg[/img]
然后ASPX.CS的源码如下:

using System;
using System.Collections.Generic;
using System.Linq;
using System.Web;
using System.Web.UI;
using System.Web.UI.WebControls;
using System.Text.RegularExpressions; // 要使用正则表达式得导入此包

public partial class regTest : System.Web.UI.Page
{
protected void Page_Load(object sender, EventArgs e)
{

}

// 分析参数
protected void Button1_Click(object sender, EventArgs e)
{
Label1.Text = "";
string str = TextBox1.Text;
// 建立正则对象,可以加些杂七杂八的参数,如忽略大小写之类的
// 在这里我没加,想知道如何加的自己去GOOGLE
Regex reg = new Regex(@"(.+?) (.+)");
// 匹配,把结果放在MatchCollection集合里
MatchCollection mc = reg.Matches(str);
// 遍历集合,取出分组,即参数名称和参数值
foreach (Match m in mc)
{
Label1.Text += m.Groups[1].Value + " → " + m.Groups[2].Value + "<br />";
}
}
}

最后再预览页面,测试一下就得到分析出的结果了。
[img]http://niunan.iteye.com/upload/picture/pic/23813/b7b968f9-03f6-34ca-a70f-74988ed26590.jpg[/img]
最后就是把分析出的结果与数据库中已经有的参数名称想比较,相同的就插入相应的参数值,只要注意一个那个 PCI EXPRESS插槽 的问题就行了。
发个图文并茂的贴子还真难啊,足足弄了2个半小时,真是个消磨时间的好方法!!!
以前装了个动易的CMS,发现里面有个“采集”的功能,好像是个自动收集新闻的玩意吧,不知道能不能“采集”到太平洋上的产品参数和对应的值,那样的话就太爽啦。。
现在我的这方法只是复制参数后进行字符串的拆分处理之类的,之前还得先找到相应的产品的,要是能自动采集产品的相关信息那就爽啦。。呵呵 。。
源码传上来给大家。。
此外本人有《精通正则表达式》和《实战正则表达式》两部视频,《精通》用的是JAVA语言来讲正则,《实战》用的是C#来讲正则,有需要的朋友可发邮件到164423073@qq.com索取,也可索取那个RegexBuddy的软件,个人觉得这软件太有用啦。。。 :D :D :D
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值