在進行文字挖掘時,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中的任意一個;
二,分組引用
(?exp) :命名分組,透過分組名引用該分組;
(?:exp) :該分組只在當前位置匹配文本,在該分組之後,無法引用該分組,該分組沒有分組名,也沒有分組號;1,透過組號引用分組
在正規表示式前面定義一個分組(exp),在表達式的後面,能夠透過組號引用該分組的表達式,引用分組的語法是:group_number ;
例如:b(w+)bs+1b,在該正規表示式中,只存在一個分組(w+),組號是1,在該分組的後面,使用1來引用該分組,將1替換為分組的子表達式,等價於:b(w+)bs+(w+)b。
(?(?!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