在.NET中使用正则表达式对太平洋产品参数进行分析!
生活随笔
收集整理的這篇文章主要介紹了
在.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
[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
總結
以上是生活随笔為你收集整理的在.NET中使用正则表达式对太平洋产品参数进行分析!的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: upvar, pass by name
- 下一篇: python中description_p