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

断言是一个逻辑表达式,只有当表达式为真时,匹配成功。当匹配成功时,返回文本,返回的文本不包含前缀或后缀,即,断言用于查找在特定“文本”之前或之后的文本。断言的四种语法:

(?=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

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

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