正则表达式和文本挖掘(Text Mining)

在进行文本挖掘时,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):使用这种语法定义的分组,不能引用,只能在当前的位置匹配文本,正则表达式不为该分组自动分配组号。

三,断言查找

内容版权声明:除非注明,否则皆为本站原创文章。

转载注明出处:https://www.heiqu.com/64104214f5d054a446944572fee54fd9.html