首頁  >  文章  >  後端開發  >  正規表示式與文字探勘--Text Mining

正規表示式與文字探勘--Text Mining

伊谢尔伦
伊谢尔伦原創
2016-12-05 11:56:331437瀏覽

在進行文字挖掘時,TSQL中的通配符(Wildchar)顯得功能不足,這時,使用「CLR+正規表示式」是非常不錯的選擇,正規表示式看似非常複雜,但,萬變不離其宗,熟練正規表示式的元數據,就能熟練且靈活地使用正規表示式完成複雜的Text Mining工作。

一,正規表示式的特殊字元

1,常用元字元

用以匹配特定的字元(字母,數字,符號),注意字母是區分大小寫的:

. :匹配除換行符以外的任意字元 
w :符合字母或數字或底線或漢字 
s :符合任意的空白符 
d :符合數字 
b :符合單字的開始或結束 
^ :符合字串的開始$的結束 
k :引用分組名,例如:k,表示引用名字為group_name的分組 
group_number:group_number是分組的組號,1,2,3等,表示透過組號引用分組 
2,重複字元或分組

指定前面一個字元或分組重複的次數:

:重複零次或更多

:重複一次或更多次 

? :重複零次或一次 
{n} :重複n次 
{n ,} :重複n次或更多 
{n,m} :重複n到m次 
3,分組,轉義,分支,限定符

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

() :用小括號表示一個分組 

: 定義分組名 之間的字符串是分組名 
: 轉義字符,將特殊字符轉移為普通字符,例如:(,表示小括號“(”,小括號不再作為特殊字符 
| : 分支,表達式之間是“或”的關係 
[] : 指定限定字符列表,一個字符必須匹配列表中任意一個字符,在中括號中指定匹配的字符列表,例如:[aeiou] 一個字符必須aeiou中的任一個; 
[^ ] : 指定排除字符列表,一個字符不能是排除列表中的任意一個字符,中括號中指定排除的字符列表,例如:[^aeiou ] 一個字元不能是aeiou中的任意一個; 
二,分組引用

分組,是使用小括號指定的一個子表達式;分組引用,是指在表達式中,重複使用子表達式,使正則表達式的寫法更簡潔。第一個分組的組號為1,第二個分組的組號為2,以此類推。 ; 

(?exp) :命名分組,透過分組名引用該分組; 

(?:exp) :該分組只在當前位置匹配文本,在該分組之後,無法引用該分組,該分組沒有分組名,也沒有分組號; 

1,透過組號引用分組

在正規表示式前面定義一個分組(exp),在表達式的後面,能夠透過組號引用該分組的表達式,引用分組的語法是:group_number ;

例如:b(w+)bs+1b,在該正規表示式中,只存在一個分組(w+),組號是1,在該分組的後面,使用1來引用該分組,將1替換為分組的子表達式,等價於:b(w+)bs+(w+)b。

2,透過分組名引用分組

在正規表示式中,能夠對分組命名,命名的分組格式:(?exp),分組名是name,透過name來引用該分組的格式是:k,透過分組名和組號引用分組,其文字匹配的行為是一樣的。

例如:b(?w+)bs+1b,在該分組的後面中,使用k引用該分組,將k替換為分組的子表達式,等價於:b(w+)bs+(w+)b。

3,無法引用的分組

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

三,斷言查找

斷言是一個邏輯表達式,只有當表達式為真時,匹配成功。當匹配成功時,返回文本,返回的文本不包含前綴或後綴,即,斷言用於查找在特定“文本”之前或之後的文本。斷言的四個語法:

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

(?(?!exp):文字的後綴不是exp,回傳後綴不是exp的表達式 

( ? 1,後綴符合


(?=exp):文字的後面符合表達式exp,傳回exp位置之前的表達式。字尾匹配,和TSQL的 “%ing”類似;

例如正規表示式:bw+(?=ingb)

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

例如,查找“I'm reading a book” ,它會匹配“reading”,因為該字符後面以ing結尾,該正則表達式返回read,斷言返回的文本不包含後綴。

2,前綴匹配

(?例如正規表示式:(?

分析:單字的打頭(b),且單字的前綴是re,匹配以re開頭的單詞,返回單字的後半部分,re之後的部分;

例如,查找“I am reading a book”,它會匹配“reading”,因為該字符前面以re打頭,該正則表達式返回ading,斷言傳回的文字不包含前綴。

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

這兩個斷言查找,跟前面兩個相反,作用不大,簡單了解一下:

(?!exp) :文本的後綴不是exp,返回字尾不是exp的表達式 
( ? 3.1 例如,正規表示式:bw+(?!ingb)

分析:不符以ing結尾的單字,找出“I am reading a book”,回傳的文字:I,am,a,book

3.2 例如打頭的單字,找出“I am reading a book”,回傳的文字:I,am,a,book

陳述:
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn