正則表達(dá)式和文本挖掘(TextMining)

    

創(chuàng)新互聯(lián)公司是一家以網(wǎng)絡(luò)技術(shù)公司,為中小企業(yè)提供網(wǎng)站維護(hù)、網(wǎng)站設(shè)計(jì)、成都網(wǎng)站設(shè)計(jì)、網(wǎng)站備案、服務(wù)器租用、空間域名、軟件開發(fā)、小程序制作等企業(yè)互聯(lián)網(wǎng)相關(guān)業(yè)務(wù),是一家有著豐富的互聯(lián)網(wǎng)運(yùn)營(yíng)推廣經(jīng)驗(yàn)的科技公司,有著多年的網(wǎng)站建站經(jīng)驗(yàn),致力于幫助中小企業(yè)在互聯(lián)網(wǎng)讓打出自已的品牌和口碑,讓企業(yè)在互聯(lián)網(wǎng)上打開一個(gè)面向全國(guó)乃至全球的業(yè)務(wù)窗口:建站聯(lián)系熱線:18982081108

在進(jìn)行文本挖掘時(shí),TSQL中的通配符(Wildchar)顯得功能不足,這時(shí),使用“CLR+正則表達(dá)式”是非常不錯(cuò)的選擇,正則表達(dá)式看似非常復(fù)雜,但,萬變不離其宗,熟練掌握正則表達(dá)式的元數(shù)據(jù),就能熟練和靈活使用正則表達(dá)式完成復(fù)雜的Text Mining工作。 

一,正則表達(dá)式的特殊字符

1,常用元字符

用以匹配特定的字符(字母,數(shù)字,符號(hào)),注意字母是區(qū)分大小寫的:

  • . :匹配除換行符以外的任意字符

  • \w :匹配字母或數(shù)字或下劃線或漢字

  • \s :匹配任意的空白符

  • \d :匹配數(shù)字

  • \b :匹配單詞的開始或結(jié)束

  • ^ :匹配字符串的開始

  • $ :匹配字符串的結(jié)束

  • \k :引用分組名,例如:\k<group_name>,表示引用名字為group_name的分組

  • \group_number:group_number是分組的組號(hào),1,2,3等,表示通過組號(hào)引用分組

2,重復(fù)字符或分組

指定前面一個(gè)字符或分組重復(fù)的次數(shù):

  • * :重復(fù)零次或更多次

  • + :重復(fù)一次或更多次

  • ? :重復(fù)零次或一次

  • {n} :重復(fù)n次

  • {n,} :重復(fù)n次或更多次

  • {n,m} :重復(fù)n到m次

3,分組,轉(zhuǎn)義,分支,限定符

這些字符有特定的含義和用途:

  • () : 用小括號(hào)表示一個(gè)分組

  • <>: 定義分組名< 和 > 之間的字符串是分組名

  • \ : 轉(zhuǎn)義字符,將特殊字符轉(zhuǎn)移為普通字符,例如:\(,表示小括號(hào)“(”,小括號(hào)不再作為特殊字符

  • | : 分支,表達(dá)式之間是“或”的關(guān)系

  • [] : 指定限定字符列表,一個(gè)字符必須匹配列表中任意一個(gè)字符,在中括號(hào)中指定匹配的字符列表,例如:[aeiou] 一個(gè)字符必須aeiou中的任意一個(gè);

  • [^ ] : 指定排除字符列表,一個(gè)字符不能是排除列表中的任意一個(gè)字符,中括號(hào)中指定排除的字符列表,例如:[^aeiou] 一個(gè)字符不能是aeiou中的任意一個(gè);

二,分組引用

分組,是使用小括號(hào)指定的一個(gè)子表達(dá)式;分組引用,是指在表達(dá)式中,重復(fù)使用子表達(dá)式,使正則表達(dá)式的寫法更簡(jiǎn)潔。默認(rèn)情況下,正則表達(dá)式為每個(gè)分組自動(dòng)分配一個(gè)組號(hào),規(guī)則是:組號(hào)從1開始,從左向右,組號(hào)依次加1(base-1),例如,第一個(gè)分組的組號(hào)為1,第二個(gè)分組的組號(hào)為2,以此類推。

分組定義的三種形式:

  • (exp) :自動(dòng)分配組號(hào),通過分組號(hào)引用該分組;

  • (?<name>exp) :命名分組,通過分組名引用該分組;

  • (?:exp) :該分組只在當(dāng)前位置匹配文本,在該分組之后,無法引用該分組,該分組沒有分組名,也沒有分組號(hào);

1,通過組號(hào)引用分組

在正則表達(dá)式前面定義一個(gè)分組(exp),在表達(dá)式的后面,能夠通過組號(hào)引用該分組的表達(dá)式,引用分組的語法是:\group_number;

例如:\b(\w+)\b\s+\1\b,在該正則表達(dá)式中,只存在一個(gè)分組(\w+),組號(hào)是1,在該分組的后面,使用\1來引用該分組,將\1替換為分組的子表達(dá)式,等價(jià)于:\b(\w+)\b\s+(\w+)\b。

2,通過分組名引用分組

在正則表達(dá)式中,能夠?qū)Ψ纸M命名,命名的分組格式:(?<name>exp),分組名是name,通過name來引用該分組的格式是:\k<group_name>,通過分組名和組號(hào)引用分組,其文本匹配的行為是一樣的。

例如:\b(?<word>\w+)\b\s+\1\b,在該分組的后面中,使用\k<word>引用該分組,將\k<word>替換為分組的子表達(dá)式,等價(jià)于:\b(\w+)\b\s+(\w+)\b。

3,無法引用的分組

(?:exp):使用這種語法定義的分組,不能引用,只能在當(dāng)前的位置匹配文本,正則表達(dá)式不為該分組自動(dòng)分配組號(hào)。

三,斷言查找

斷言是一個(gè)邏輯表達(dá)式,只有當(dāng)表達(dá)式為真時(shí),匹配成功。當(dāng)匹配成功時(shí),返回文本,返回的文本不包含前綴或后綴,即,斷言用于查找在特定“文本”之前或之后的文本。斷言的四種語法:

  • (?=exp):文本的后面匹配表達(dá)式exp,返回exp位置之前的表達(dá)式

  • (?<=exp) :文本的前面匹配表達(dá)式exp,返回exp位置之后的表達(dá)式

  • (?!exp):文本的后綴不是exp,返回后綴不是exp的表達(dá)式

  • (?<!exp):文本的前綴不是exp,返回前綴不是exp的表達(dá)式

1,后綴匹配

(?=exp):文本的后面匹配表達(dá)式exp,返回exp位置之前的表達(dá)式。后綴匹配,和TSQL的 "%ing"類似;

比如正則表達(dá)式:\b\w+(?=ing\b)

分析:斷言其后綴是ing,并且是單詞的結(jié)尾(\b),匹配以ing結(jié)尾的單詞,但返回單詞的前面部分,ing之前的部分;

例如,查找“I'm reading a book”,它會(huì)匹配“reading”,因?yàn)樵撟址竺嬉詉ng結(jié)尾,該正則表達(dá)式返回read,斷言返回的文本不包含后綴。

2,前綴匹配

(?<=exp):文本的前面匹配表達(dá)式exp,返回exp位置之后的表達(dá)式。前綴匹配,和TSQL的 "re%"類似;
比如正則表達(dá)式:(?<=\bre)\w+\b

分析:?jiǎn)卧~的打頭(\b),并且單詞的前綴是re,匹配以re開頭的單詞,返回單詞的后半部分,re之后的部分;

例如,查找“I am reading a book”,它會(huì)匹配“reading”,因?yàn)樵撟址懊嬉詒e打頭,該正則表達(dá)式返回ading,斷言返回的文本不包含前綴。

3,查找前綴或后綴不是特定文本的文本

這兩個(gè)斷言查找,跟前面兩個(gè)相反,作用不大,簡(jiǎn)單了解一下:

  • (?!exp) :文本的后綴不是exp,返回后綴不是exp的表達(dá)式

  • (?<!exp) :文本的前綴不是exp,返回前綴不是exp的表達(dá)式

3.1 比如,正則表達(dá)式:\b\w+(?!ing\b)

分析:不匹配以ing結(jié)尾的單詞,查找“I am reading a book”,返回的文本:I,am,a,book

3.2 比如,正則表達(dá)式:(?<!\bre)\w+\b

分析:不匹配以re打頭的單詞,查找“I am reading a book”,返回的文本:I,am,a,book

網(wǎng)站題目:正則表達(dá)式和文本挖掘(TextMining)
網(wǎng)頁鏈接:http://muchs.cn/article44/ishjhe.html

成都網(wǎng)站建設(shè)公司_創(chuàng)新互聯(lián),為您提供域名注冊(cè)、營(yíng)銷型網(wǎng)站建設(shè)App設(shè)計(jì)、網(wǎng)站導(dǎo)航云服務(wù)器、定制網(wǎng)站

廣告

聲明:本網(wǎng)站發(fā)布的內(nèi)容(圖片、視頻和文字)以用戶投稿、用戶轉(zhuǎn)載內(nèi)容為主,如果涉及侵權(quán)請(qǐng)盡快告知,我們將會(huì)在第一時(shí)間刪除。文章觀點(diǎn)不代表本網(wǎng)站立場(chǎng),如需處理請(qǐng)聯(lián)系客服。電話:028-86922220;郵箱:631063699@qq.com。內(nèi)容未經(jīng)允許不得轉(zhuǎn)載,或轉(zhuǎn)載時(shí)需注明來源: 創(chuàng)新互聯(lián)

成都做網(wǎng)站