千家信息网

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

发表于:2026-11-01 作者:千家信息网编辑
千家信息网最后更新 2026年11月01日,在进行文本挖掘时,TSQL中的通配符(Wildchar)显得功能不足,这时,使用"CLR+正则表达式"是非常不错的选择,正则表达式看似非常复杂,但,万变不离其宗,熟练掌握正则表达式的元数据,就能熟练和
千家信息网最后更新 2026年11月01日正则表达式和文本挖掘(Text Mining)

在进行文本挖掘时,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开始,从左向右,组号依次加1(base-1),例如,第一个分组的组号为1,第二个分组的组号为2,以此类推。

分组定义的三种形式:

  • (exp) :自动分配组号,通过分组号引用该分组;

  • (?exp) :命名分组,通过分组名引用该分组;

  • (?:exp) :该分组只在当前位置匹配文本,在该分组之后,无法引用该分组,该分组没有分组名,也没有分组号;

1,通过组号引用分组

在正则表达式前面定义一个分组(exp),在表达式的后面,能够通过组号引用该分组的表达式,引用分组的语法是:\group_number;

例如:\b(\w+)\b\s+\1\b,在该正则表达式中,只存在一个分组(\w+),组号是1,在该分组的后面,使用\1来引用该分组,将\1替换为分组的子表达式,等价于:\b(\w+)\b\s+(\w+)\b。

2,通过分组名引用分组

在正则表达式中,能够对分组命名,命名的分组格式:(?exp),分组名是name,通过name来引用该分组的格式是:\k,通过分组名和组号引用分组,其文本匹配的行为是一样的。

例如:\b(?\w+)\b\s+\1\b,在该分组的后面中,使用\k引用该分组,将\k替换为分组的子表达式,等价于:\b(\w+)\b\s+(\w+)\b。

3,无法引用的分组

(?: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的表达式

3.1 比如,正则表达式:\b\w+(?!ing\b)

分析:不匹配以ing结尾的单词,查找"I am reading a book",返回的文本:I,am,a,book

3.2 比如,正则表达式:(?

分析:不匹配以re打头的单词,查找"I am reading a book",返回的文本:I,am,a,book


分组 表达式 字符 文本 正则 前缀 单词 后缀 位置 括号 分析 特殊 字母 字符串 数字 更多 语法 部分 分配 复杂 数据库的安全要保护哪些东西 数据库安全各自的含义是什么 生产安全数据库录入 数据库的安全性及管理 数据库安全策略包含哪些 海淀数据库安全审计系统 建立农村房屋安全信息数据库 易用的数据库客户端支持安全管理 连接数据库失败ssl安全错误 数据库的锁怎样保障安全 互联网与科技 互联网科技社 科技类互联网 互联网金融 金融科技 居家互联网科技有限公司 恒银科技与互联网金融 福州新华互联网科技学校 知乎 承德科技产业互联网发展 银川新华互联网科技职业技术培训学校图片 贵州叶脉互联网科技有限公司所属行业 互联网金融中的现代科技 厦门比较好的科技互联网公司 昭通互联网科技选哪家 广州市恰铎互联网科技有限公司 山东有哪些互联网科技公司 2021世界互联网领先科技成果发布 九思连强互联网电子科技有限公司 福州德业互联网科技 兰石爱特工业互联网科技分公司 河南商务圈互联网科技有限公司 云南咖啡 保险科技 互联网保险 万达互联网科技 互联网科技类展会 成都仁贤领冠互联网科技有限公司 济南和联互联网科技有限公司 创业天下互联网科技有限公司 崇明区互联网教育科技诚信经营 中和天地互联网科技有限公司 科技互联网行业投资研究
0