91超碰碰碰碰久久久久久综合_超碰av人澡人澡人澡人澡人掠_国产黄大片在线观看画质优化_txt小说免费全本

溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點擊 登錄注冊 即表示同意《億速云用戶服務條款》

正則表達式和文本挖掘(Text Mining)

發布時間:2020-05-30 22:42:40 來源:網絡 閱讀:275 作者:胡壯壯 欄目:網絡安全

    

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

一,正則表達式的特殊字符

1,常用元字符

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

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

  • \w :匹配字母或數字或下劃線或漢字

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

  • \d :匹配數字

  • \b :匹配單詞的開始或結束

  • ^ :匹配字符串的開始

  • $ :匹配字符串的結束

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

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

2,重復字符或分組

指定前面一個字符或分組重復的次數:

  • * :重復零次或更多次

  • + :重復一次或更多次

  • ? :重復零次或一次

  • {n} :重復n次

  • {n,} :重復n次或更多次

  • {n,m} :重復n到m次

3,分組,轉義,分支,限定符

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

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

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

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

  • | : 分支,表達式之間是“或”的關系

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

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

二,分組引用

分組,是使用小括號指定的一個子表達式;分組引用,是指在表達式中,重復使用子表達式,使正則表達式的寫法更簡潔。默認情況下,正則表達式為每個分組自動分配一個組號,規則是:組號從1開始,從左向右,組號依次加1(base-1),例如,第一個分組的組號為1,第二個分組的組號為2,以此類推。

分組定義的三種形式:

  • (exp) :自動分配組號,通過分組號引用該分組;

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

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

1,通過組號引用分組

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

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

2,通過分組名引用分組

在正則表達式中,能夠對分組命名,命名的分組格式:(?<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):使用這種語法定義的分組,不能引用,只能在當前的位置匹配文本,正則表達式不為該分組自動分配組號。

三,斷言查找

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

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

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

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

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

1,后綴匹配

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

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

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

例如,查找“I'm reading a book”,它會匹配“reading”,因為該字符后面以ing結尾,該正則表達式返回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結尾的單詞,查找“I am reading a book”,返回的文本:I,am,a,book

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

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


向AI問一下細節

免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。

AI

友谊县| 固始县| 永春县| 海晏县| 巴彦县| 白城市| 宜黄县| 兰西县| 无锡市| 时尚| 武定县| 扶沟县| 连山| 苍山县| 宜宾市| 南通市| 电白县| 板桥市| 武汉市| 嘉峪关市| 家居| 陈巴尔虎旗| 花莲县| 都安| 临西县| 桦甸市| 萝北县| 抚顺县| 杭州市| 安平县| 呼图壁县| 沧州市| 南江县| 广东省| 新巴尔虎左旗| 连江县| 报价| 鄢陵县| 抚宁县| 盐亭县| 农安县|