在.NET中使用正则表达式对太平洋产品参数进行分析!
生活随笔
收集整理的這篇文章主要介紹了
在.NET中使用正则表达式对太平洋产品参数进行分析!
小編覺得挺不錯(cuò)的,現(xiàn)在分享給大家,幫大家做個(gè)參考.
目前在做的項(xiàng)目是一個(gè)類似于太平洋的產(chǎn)品報(bào)價(jià)系統(tǒng)(其實(shí)說(shuō)白了就是一個(gè)仿太平洋的網(wǎng)站,產(chǎn)品數(shù)據(jù)全是摘錄自太平洋),產(chǎn)品的參數(shù)分參數(shù)分類(主要參數(shù)、性能參數(shù)...),參數(shù)名稱(型號(hào)、芯片組、CPU接口...),數(shù)據(jù)庫(kù)里已經(jīng)錄好了產(chǎn)品的參數(shù)分類及參數(shù)名稱,目前正在對(duì)著太平洋的產(chǎn)品庫(kù)進(jìn)行產(chǎn)品的參數(shù)錄入,之前都是復(fù)制一個(gè)參數(shù)值了再粘貼到我們的網(wǎng)站里然后點(diǎn)擊確定了進(jìn)行參數(shù)錄入的,某天覺得這種方法蠻麻煩,幾萬(wàn)種產(chǎn)品的要錄參數(shù)到什么時(shí)候啊,于是自己看了下太平洋的產(chǎn)品參數(shù),如下圖:
[img]http://niunan.iteye.com/upload/picture/pic/23789/d85c77f0-df6a-37b4-8fe4-c29461921466.jpg[/img]
好像沒(méi)發(fā)覺什么特別的地方,然后自己如下圖的方式一次性把參數(shù)全復(fù)制了粘貼到記事本里,
[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]
呵呵,發(fā)覺什么了沒(méi),每條參數(shù)名稱和參數(shù)值占一行,而且他們之間都是用空格格開的,(大部分是),這樣的話我們可以通過(guò)一些字符串的處理,以空格為分界符把參數(shù)名稱和參數(shù)值拆開,這樣就得到最后我們所要的結(jié)果了,就能批量的把參數(shù)值插入到數(shù)據(jù)庫(kù)里了。
試了一下用普通的字符串處理,覺得蠻麻煩的,于是就想到了正則表達(dá)式,也正好借此機(jī)會(huì)試試.NET中如何使用正則表達(dá)式吧,先把正則表達(dá)式寫出來(lái)吧。最近從網(wǎng)上無(wú)意中找到的一個(gè)驗(yàn)證正則表達(dá)式的好軟件(RegexBuddy),個(gè)人覺得蠻好用的,打開后界面如下:
[img]http://niunan.iteye.com/upload/picture/pic/23791/685ee524-646d-3c26-a8db-21a6f103fe39.jpg[/img]
注意畫圈圈的那三個(gè)按鈕,分配是 匹配、替換、分割,我們要用到的是替換按鈕
點(diǎn)擊Replace 和 Test 按鈕,然后輸入正則表達(dá)式及粘貼復(fù)制出來(lái)的參數(shù)名稱及參數(shù)值,瑞在Test按鈕上面那個(gè)框框里輸入 $1 → $2 ,如下圖:
[img]http://niunan.iteye.com/upload/picture/pic/23803/def11fe1-35a6-3efa-b045-9206dc51054e.jpg[/img]
熟悉正則的朋友應(yīng)該知道,(.+) (.+)匹配 1個(gè)以上的任意字符后有個(gè)空格,空格之后再有1個(gè)以上的任意字符,加上括號(hào)是給匹配的結(jié)果進(jìn)行分組$1和$2就表示第一組和第二組,下面的測(cè)試參數(shù)會(huì)變色就說(shuō)明匹配我們寫的正則表達(dá)式,每個(gè)匹配的結(jié)果用不同的顏色相隔表示,上面表示每一行都匹配我們寫的正則表達(dá)式,然后我們?nèi)缦聢D按下那個(gè)按鈕,
[img]http://niunan.iteye.com/upload/picture/pic/23801/9a9bb941-1515-30df-8413-73164153a29e.jpg[/img]
得到下圖結(jié)果
[img]http://niunan.iteye.com/upload/picture/pic/23797/8b7dd9a6-3864-35b6-9293-c338f6c6b9d3.jpg[/img]
大家看到什么了,匹配出來(lái)了吧,不過(guò)有點(diǎn)不對(duì)勁,我們要的是把第一個(gè)空格之前的分為第一組,而匹配的結(jié)果卻是把最后一個(gè)空格之前的分為第一組了,這就是正則表達(dá)式[color=blue]貪婪匹配與懶惰匹配[/color]的區(qū)別,下圖是我改了正則表達(dá)式之后匹配的結(jié)果,注意我把 PCI Express插槽 改成 PCI-Express插槽 ,把空格換成一個(gè)減號(hào),這樣才不至于替換后的結(jié)果是PCI → *****。
[img]http://niunan.iteye.com/upload/picture/pic/23807/e55e4b58-4522-3fd1-9d96-7a441fcc3cf9.jpg[/img]
這樣就得到了我們想要的結(jié)果,至于那個(gè) PCI-Express插槽 ,我能想到的方法也只能是在更新數(shù)據(jù)庫(kù)的時(shí)候判斷一下,如果參數(shù)名稱是 PCI-Express插槽 ,則更新數(shù)據(jù)庫(kù)中 字段為 PCI Express插槽 的參數(shù)值。
既然正則表達(dá)式寫出來(lái)了,那下面就來(lái)做ASPX頁(yè)面的代碼編寫,在這里我只是把分析出的結(jié)果輸出到界面上,新建ASPX頁(yè)面,拉入一個(gè)文本框,一個(gè)按鈕,一個(gè)標(biāo)簽,如圖:
[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; // 要使用正則表達(dá)式得導(dǎo)入此包
public partial class regTest : System.Web.UI.Page
{
protected void Page_Load(object sender, EventArgs e)
{
}
// 分析參數(shù)
protected void Button1_Click(object sender, EventArgs e)
{
Label1.Text = "";
string str = TextBox1.Text;
// 建立正則對(duì)象,可以加些雜七雜八的參數(shù),如忽略大小寫之類的
// 在這里我沒(méi)加,想知道如何加的自己去GOOGLE
Regex reg = new Regex(@"(.+?) (.+)");
// 匹配,把結(jié)果放在MatchCollection集合里
MatchCollection mc = reg.Matches(str);
// 遍歷集合,取出分組,即參數(shù)名稱和參數(shù)值
foreach (Match m in mc)
{
Label1.Text += m.Groups[1].Value + " → " + m.Groups[2].Value + "<br />";
}
}
}
最后再預(yù)覽頁(yè)面,測(cè)試一下就得到分析出的結(jié)果了。
[img]http://niunan.iteye.com/upload/picture/pic/23813/b7b968f9-03f6-34ca-a70f-74988ed26590.jpg[/img]
最后就是把分析出的結(jié)果與數(shù)據(jù)庫(kù)中已經(jīng)有的參數(shù)名稱想比較,相同的就插入相應(yīng)的參數(shù)值,只要注意一個(gè)那個(gè) PCI EXPRESS插槽 的問(wèn)題就行了。
發(fā)個(gè)圖文并茂的貼子還真難啊,足足弄了2個(gè)半小時(shí),真是個(gè)消磨時(shí)間的好方法!!!
以前裝了個(gè)動(dòng)易的CMS,發(fā)現(xiàn)里面有個(gè)“采集”的功能,好像是個(gè)自動(dòng)收集新聞的玩意吧,不知道能不能“采集”到太平洋上的產(chǎn)品參數(shù)和對(duì)應(yīng)的值,那樣的話就太爽啦。。
現(xiàn)在我的這方法只是復(fù)制參數(shù)后進(jìn)行字符串的拆分處理之類的,之前還得先找到相應(yīng)的產(chǎn)品的,要是能自動(dòng)采集產(chǎn)品的相關(guān)信息那就爽啦。。呵呵 。。
源碼傳上來(lái)給大家。。
此外本人有《精通正則表達(dá)式》和《實(shí)戰(zhàn)正則表達(dá)式》兩部視頻,《精通》用的是JAVA語(yǔ)言來(lái)講正則,《實(shí)戰(zhàn)》用的是C#來(lái)講正則,有需要的朋友可發(fā)郵件到164423073@qq.com索取,也可索取那個(gè)RegexBuddy的軟件,個(gè)人覺得這軟件太有用啦。。。 :D :D :D
[img]http://niunan.iteye.com/upload/picture/pic/23789/d85c77f0-df6a-37b4-8fe4-c29461921466.jpg[/img]
好像沒(méi)發(fā)覺什么特別的地方,然后自己如下圖的方式一次性把參數(shù)全復(fù)制了粘貼到記事本里,
[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]
呵呵,發(fā)覺什么了沒(méi),每條參數(shù)名稱和參數(shù)值占一行,而且他們之間都是用空格格開的,(大部分是),這樣的話我們可以通過(guò)一些字符串的處理,以空格為分界符把參數(shù)名稱和參數(shù)值拆開,這樣就得到最后我們所要的結(jié)果了,就能批量的把參數(shù)值插入到數(shù)據(jù)庫(kù)里了。
試了一下用普通的字符串處理,覺得蠻麻煩的,于是就想到了正則表達(dá)式,也正好借此機(jī)會(huì)試試.NET中如何使用正則表達(dá)式吧,先把正則表達(dá)式寫出來(lái)吧。最近從網(wǎng)上無(wú)意中找到的一個(gè)驗(yàn)證正則表達(dá)式的好軟件(RegexBuddy),個(gè)人覺得蠻好用的,打開后界面如下:
[img]http://niunan.iteye.com/upload/picture/pic/23791/685ee524-646d-3c26-a8db-21a6f103fe39.jpg[/img]
注意畫圈圈的那三個(gè)按鈕,分配是 匹配、替換、分割,我們要用到的是替換按鈕
點(diǎn)擊Replace 和 Test 按鈕,然后輸入正則表達(dá)式及粘貼復(fù)制出來(lái)的參數(shù)名稱及參數(shù)值,瑞在Test按鈕上面那個(gè)框框里輸入 $1 → $2 ,如下圖:
[img]http://niunan.iteye.com/upload/picture/pic/23803/def11fe1-35a6-3efa-b045-9206dc51054e.jpg[/img]
熟悉正則的朋友應(yīng)該知道,(.+) (.+)匹配 1個(gè)以上的任意字符后有個(gè)空格,空格之后再有1個(gè)以上的任意字符,加上括號(hào)是給匹配的結(jié)果進(jìn)行分組$1和$2就表示第一組和第二組,下面的測(cè)試參數(shù)會(huì)變色就說(shuō)明匹配我們寫的正則表達(dá)式,每個(gè)匹配的結(jié)果用不同的顏色相隔表示,上面表示每一行都匹配我們寫的正則表達(dá)式,然后我們?nèi)缦聢D按下那個(gè)按鈕,
[img]http://niunan.iteye.com/upload/picture/pic/23801/9a9bb941-1515-30df-8413-73164153a29e.jpg[/img]
得到下圖結(jié)果
[img]http://niunan.iteye.com/upload/picture/pic/23797/8b7dd9a6-3864-35b6-9293-c338f6c6b9d3.jpg[/img]
大家看到什么了,匹配出來(lái)了吧,不過(guò)有點(diǎn)不對(duì)勁,我們要的是把第一個(gè)空格之前的分為第一組,而匹配的結(jié)果卻是把最后一個(gè)空格之前的分為第一組了,這就是正則表達(dá)式[color=blue]貪婪匹配與懶惰匹配[/color]的區(qū)別,下圖是我改了正則表達(dá)式之后匹配的結(jié)果,注意我把 PCI Express插槽 改成 PCI-Express插槽 ,把空格換成一個(gè)減號(hào),這樣才不至于替換后的結(jié)果是PCI → *****。
[img]http://niunan.iteye.com/upload/picture/pic/23807/e55e4b58-4522-3fd1-9d96-7a441fcc3cf9.jpg[/img]
這樣就得到了我們想要的結(jié)果,至于那個(gè) PCI-Express插槽 ,我能想到的方法也只能是在更新數(shù)據(jù)庫(kù)的時(shí)候判斷一下,如果參數(shù)名稱是 PCI-Express插槽 ,則更新數(shù)據(jù)庫(kù)中 字段為 PCI Express插槽 的參數(shù)值。
既然正則表達(dá)式寫出來(lái)了,那下面就來(lái)做ASPX頁(yè)面的代碼編寫,在這里我只是把分析出的結(jié)果輸出到界面上,新建ASPX頁(yè)面,拉入一個(gè)文本框,一個(gè)按鈕,一個(gè)標(biāo)簽,如圖:
[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; // 要使用正則表達(dá)式得導(dǎo)入此包
public partial class regTest : System.Web.UI.Page
{
protected void Page_Load(object sender, EventArgs e)
{
}
// 分析參數(shù)
protected void Button1_Click(object sender, EventArgs e)
{
Label1.Text = "";
string str = TextBox1.Text;
// 建立正則對(duì)象,可以加些雜七雜八的參數(shù),如忽略大小寫之類的
// 在這里我沒(méi)加,想知道如何加的自己去GOOGLE
Regex reg = new Regex(@"(.+?) (.+)");
// 匹配,把結(jié)果放在MatchCollection集合里
MatchCollection mc = reg.Matches(str);
// 遍歷集合,取出分組,即參數(shù)名稱和參數(shù)值
foreach (Match m in mc)
{
Label1.Text += m.Groups[1].Value + " → " + m.Groups[2].Value + "<br />";
}
}
}
最后再預(yù)覽頁(yè)面,測(cè)試一下就得到分析出的結(jié)果了。
[img]http://niunan.iteye.com/upload/picture/pic/23813/b7b968f9-03f6-34ca-a70f-74988ed26590.jpg[/img]
最后就是把分析出的結(jié)果與數(shù)據(jù)庫(kù)中已經(jīng)有的參數(shù)名稱想比較,相同的就插入相應(yīng)的參數(shù)值,只要注意一個(gè)那個(gè) PCI EXPRESS插槽 的問(wèn)題就行了。
發(fā)個(gè)圖文并茂的貼子還真難啊,足足弄了2個(gè)半小時(shí),真是個(gè)消磨時(shí)間的好方法!!!
以前裝了個(gè)動(dòng)易的CMS,發(fā)現(xiàn)里面有個(gè)“采集”的功能,好像是個(gè)自動(dòng)收集新聞的玩意吧,不知道能不能“采集”到太平洋上的產(chǎn)品參數(shù)和對(duì)應(yīng)的值,那樣的話就太爽啦。。
現(xiàn)在我的這方法只是復(fù)制參數(shù)后進(jìn)行字符串的拆分處理之類的,之前還得先找到相應(yīng)的產(chǎn)品的,要是能自動(dòng)采集產(chǎn)品的相關(guān)信息那就爽啦。。呵呵 。。
源碼傳上來(lái)給大家。。
此外本人有《精通正則表達(dá)式》和《實(shí)戰(zhàn)正則表達(dá)式》兩部視頻,《精通》用的是JAVA語(yǔ)言來(lái)講正則,《實(shí)戰(zhàn)》用的是C#來(lái)講正則,有需要的朋友可發(fā)郵件到164423073@qq.com索取,也可索取那個(gè)RegexBuddy的軟件,個(gè)人覺得這軟件太有用啦。。。 :D :D :D
總結(jié)
以上是生活随笔為你收集整理的在.NET中使用正则表达式对太平洋产品参数进行分析!的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問(wèn)題。
- 上一篇: upvar, pass by name
- 下一篇: python中description_p