在進行文本挖掘時,TSQL中的通配符(Wildchar)顯得功能不足,這時,使用“CLR+正則表達式”是非常不錯的選擇,正則表達式看似非常復(fù)雜,但,萬變不離其宗,熟練掌握正則表達式的元數(shù)據(jù),就能熟練和靈活使用正則表達式完成復(fù)雜的Text Mining工作。
一,正則表達式的特殊字符
1,常用元字符
用以匹配特定的字符(字母,數(shù)字,符號),注意字母是區(qū)分大小寫的:
. :匹配除換行符以外的任意字符
\w :匹配字母或數(shù)字或下劃線或漢字
\s :匹配任意的空白符
\d :匹配數(shù)字
\b :匹配單詞的開始或結(jié)束
^ :匹配字符串的開始
$ :匹配字符串的結(jié)束
\k :引用分組名,例如:\k<group_name>,表示引用名字為group_name的分組
\group_number:group_number是分組的組號,1,2,3等,表示通過組號引用分組
2,重復(fù)字符或分組
指定前面一個字符或分組重復(fù)的次數(shù):
* :重復(fù)零次或更多次
+ :重復(fù)一次或更多次
? :重復(fù)零次或一次
{n} :重復(fù)n次
{n,} :重復(fù)n次或更多次
{n,m} :重復(fù)n到m次
3,分組,轉(zhuǎn)義,分支,限定符
這些字符有特定的含義和用途:
() : 用小括號表示一個分組
<>: 定義分組名< 和 > 之間的字符串是分組名
\ : 轉(zhuǎn)義字符,將特殊字符轉(zhuǎn)移為普通字符,例如:\(,表示小括號“(”,小括號不再作為特殊字符
| : 分支,表達式之間是“或”的關(guān)系
[] : 指定限定字符列表,一個字符必須匹配列表中任意一個字符,在中括號中指定匹配的字符列表,例如:[aeiou] 一個字符必須aeiou中的任意一個;
[^ ] : 指定排除字符列表,一個字符不能是排除列表中的任意一個字符,中括號中指定排除的字符列表,例如:[^aeiou] 一個字符不能是aeiou中的任意一個;
二,分組引用
分組,是使用小括號指定的一個子表達式;分組引用,是指在表達式中,重復(fù)使用子表達式,使正則表達式的寫法更簡潔。默認(rèn)情況下,正則表達式為每個分組自動分配一個組號,規(guī)則是:組號從1開始,從左向右,組號依次加1(base-1),例如,第一個分組的組號為1,第二個分組的組號為2,以此類推。
分組定義的三種形式:
(exp) :自動分配組號,通過分組號引用該分組;
(?<name>exp) :命名分組,通過分組名引用該分組;
(?:exp) :該分組只在當(dāng)前位置匹配文本,在該分組之后,無法引用該分組,該分組沒有分組名,也沒有分組號;
1,通過組號引用分組
在正則表達式前面定義一個分組(exp),在表達式的后面,能夠通過組號引用該分組的表達式,引用分組的語法是:\group_number;
例如:\b(\w+)\b\s+\1\b,在該正則表達式中,只存在一個分組(\w+),組號是1,在該分組的后面,使用\1來引用該分組,將\1替換為分組的子表達式,等價于:\b(\w+)\b\s+(\w+)\b。
2,通過分組名引用分組
在正則表達式中,能夠?qū)Ψ纸M命名,命名的分組格式:(?<name>exp),分組名是name,通過name來引用該分組的格式是:\k<group_name>,通過分組名和組號引用分組,其文本匹配的行為是一樣的。
例如:\b(?<word>\w+)\b\s+\1\b,在該分組的后面中,使用\k<word>引用該分組,將\k<word>替換為分組的子表達式,等價于:\b(\w+)\b\s+(\w+)\b。
3,無法引用的分組
(?:exp):使用這種語法定義的分組,不能引用,只能在當(dāng)前的位置匹配文本,正則表達式不為該分組自動分配組號。
三,斷言查找
斷言是一個邏輯表達式,只有當(dāng)表達式為真時,匹配成功。當(dāng)匹配成功時,返回文本,返回的文本不包含前綴或后綴,即,斷言用于查找在特定“文本”之前或之后的文本。斷言的四種語法:
(?=exp):文本的后面匹配表達式exp,返回exp位置之前的表達式
(?<=exp) :文本的前面匹配表達式exp,返回exp位置之后的表達式
(?!exp):文本的后綴不是exp,返回后綴不是exp的表達式
(?<!exp):文本的前綴不是exp,返回前綴不是exp的表達式
1,后綴匹配
(?=exp):文本的后面匹配表達式exp,返回exp位置之前的表達式。后綴匹配,和TSQL的 "%ing"類似;
比如正則表達式:\b\w+(?=ing\b)
分析:斷言其后綴是ing,并且是單詞的結(jié)尾(\b),匹配以ing結(jié)尾的單詞,但返回單詞的前面部分,ing之前的部分;
例如,查找“I'm reading a book”,它會匹配“reading”,因為該字符后面以ing結(jié)尾,該正則表達式返回read,斷言返回的文本不包含后綴。
2,前綴匹配
(?<=exp):文本的前面匹配表達式exp,返回exp位置之后的表達式。前綴匹配,和TSQL的 "re%"類似;
比如正則表達式:(?<=\bre)\w+\b
分析:單詞的打頭(\b),并且單詞的前綴是re,匹配以re開頭的單詞,返回單詞的后半部分,re之后的部分;
例如,查找“I am reading a book”,它會匹配“reading”,因為該字符前面以re打頭,該正則表達式返回ading,斷言返回的文本不包含前綴。
3,查找前綴或后綴不是特定文本的文本
這兩個斷言查找,跟前面兩個相反,作用不大,簡單了解一下:
(?!exp):文本的后綴不是exp,返回后綴不是exp的表達式
(?<!exp):文本的前綴不是exp,返回前綴不是exp的表達式
3.1 比如,正則表達式:\b\w+(?!ing\b)
分析:不匹配以ing結(jié)尾的單詞,查找“I am reading a book”,返回的文本:I,am,a,book
3.2 比如,正則表達式:(?<!\bre)\w+\b
分析:不匹配以re打頭的單詞,查找“I am reading a book”,返回的文本:I,am,a,book
另外有需要云服務(wù)器可以了解下創(chuàng)新互聯(lián)scvps.cn,海內(nèi)外云服務(wù)器15元起步,三天無理由+7*72小時售后在線,公司持有idc許可證,提供“云服務(wù)器、裸金屬服務(wù)器、高防服務(wù)器、香港服務(wù)器、美國服務(wù)器、虛擬主機、免備案服務(wù)器”等云主機租用服務(wù)以及企業(yè)上云的綜合解決方案,具有“安全穩(wěn)定、簡單易用、服務(wù)可用性高、性價比高”等特點與優(yōu)勢,專為企業(yè)上云打造定制,能夠滿足用戶豐富、多元化的應(yīng)用場景需求。
文章題目:正則表達式和文本挖掘(TextMining)-創(chuàng)新互聯(lián)
地址分享:http://aaarwkj.com/article14/gocde.html
成都網(wǎng)站建設(shè)公司_創(chuàng)新互聯(lián),為您提供企業(yè)建站、移動網(wǎng)站建設(shè)、搜索引擎優(yōu)化、網(wǎng)站策劃、靜態(tài)網(wǎng)站、品牌網(wǎng)站制作
聲明:本網(wǎng)站發(fā)布的內(nèi)容(圖片、視頻和文字)以用戶投稿、用戶轉(zhuǎn)載內(nèi)容為主,如果涉及侵權(quán)請盡快告知,我們將會在第一時間刪除。文章觀點不代表本網(wǎng)站立場,如需處理請聯(lián)系客服。電話:028-86922220;郵箱:631063699@qq.com。內(nèi)容未經(jīng)允許不得轉(zhuǎn)載,或轉(zhuǎn)載時需注明來源: 創(chuàng)新互聯(lián)
猜你還喜歡下面的內(nèi)容