0 前言

正则表达式是一种定义了搜索模式的特征序列,主要是用于字符串的模式匹配,或是字符的匹配。随着计算机的普及以及互联网的发展,大量的信息以电子文档的方式呈现在人们的眼前。NLP通常锁需要处理的语料一部分来自于web网页的信息抽取,一部分来自于文本格式的文档。Web网页具有很强的开发价值,具有时效强,信息量大,结构稳定,价值高等特点。正则表达式的作用之一是将这些文档内容从非结构化转为结构化,以便后续的文本挖掘。

1 匹配字符串

在python中,我们会使用re模块来实现正则表达式。用到比较多的方法:re.search(regex,string) 这个方法,我们可以检查这个string是否匹配正则表达式regex,如果匹配,则返回一个mathch对象,如果没有就返回None。

测试文本(句子与句子之间用句号隔开):

文本最重要的来源无疑是网络。我们要把网络中的文本获取形成一个文本数据库。利用一个爬虫爬取到网络中的信息。爬取的策略又广度爬取和深度爬取。根据用户的需求,爬虫可以有主题爬虫和通用爬虫。

1.1 获取包含“爬虫”这个关键字的句子

代码:

#导入正则表达式需要的包import re#测试文档text_string='文本最重要的来源无疑是网络。我们要把网络中的文本获取形成一个文本数据库。利用一个爬虫爬取到网络中的信息。爬取的策略又广度爬取和深度爬取。根据用户的需求,爬虫可以有主题爬虫和通用爬虫。'#定义一个简单的正则表达式regex='爬虫'#使用。把测试文档进行分割p_string=text_string.split("。")#对分割后的句子进行遍历,找出与正则表达式匹配的句子for line in p_string: #search方法是用来查找匹配当前行是否匹配这个regex,返回一个match对象 if re.search(regex, line) is not None: #如果匹配到了就打印出来 print(line)

结果:

利用一个爬虫爬取到网络中的信息

根据用户的需求,爬虫可以有主题爬虫和通用爬虫

1.2 匹配任意一个字符

这里使用正则表达式中的保留字符“.”,其含义为:匹配任意一个单字符(换行除外)

例如:

正则表达式 可以匹配的例子 不能匹配的例子

“a.c” “abc”,”branch” “add”,”crash”

“..t” “bat” ,”oat” “it”,”table”

查找出:”爬+任意一个字”

程序:

import re#测试文档text_string='文本最重要的来源无疑是网络。我们要把网络中的文本获取形成一个文本数据库。利用一个爬虫爬取到网络中的信息。爬取的策略又广度爬取和深度爬取。根据用户的需求,爬虫可以有主题爬虫和通用爬虫。'#定义一个简单的正则表达式regex1='爬虫'regex2='爬.'#使用。把测试文档进行分割p_string=text_string.split("。")#对分割后的句子进行遍历,找出与正则表达式匹配的句子for line in p_string: if re.search(regex2, line) is not None: print("符合regex2:"+line)

结果:

符合regex2:利用一个爬虫爬取到网络中的信息 符合regex2:爬取的策略又广度爬取和深度爬取 符合regex2:根据用户的需求,爬虫可以有主题爬虫和通用爬虫

1.3 匹配起始和结尾字符串

符号 含义

^ 匹配开始的字符串

$ 匹配结束的字符串

例如:

“^a”:匹配所有a开始的字符串

“a$”:匹配所有a结尾的字符串

案例:查找以”文本”起始的句子:

import re#测试文档text_string='文本最重要的来源无疑是网络。我们要把网络中的文本获取形成一个文本数据库。利用一个爬虫爬取到网络中的信息。爬取的策略又广度爬取和深度爬取。根据用户的需求,爬虫可以有主题爬虫和通用爬虫。'#定义一个简单的正则表达式regex1='爬虫'regex2='爬.'regex3="^文本"#使用。把测试文档进行分割p_string=text_string.split("。")#对分割后的句子进行遍历,找出与正则表达式匹配的句子for line in p_string: if re.search(regex3, line) is not None: print("符合regex3:"+line)

结果

符合regex3:文本最重要的来源无疑是网络

1.4 使用中括号匹配多个字符

符号 含义

[] 匹配多个字符

如:”[brc]at”代表的是匹配“bat””cat”以及“rat”

案例:提取出以[主要的]或者[紧要的]为起始的新闻标题。文档:

[重要的]今年第七号台风23日登录广东东部沿海地区。

上海发布车库销售监管通知:违规者暂停网签资格。

[紧要的]中国对印连发强硬信息,印度急切需要结束对峙。

代码:

#导入正则表达式需要的包import re#测试文档text_string2=['[重要的]今年第七号台风23日登录广东东部沿海地区','上海发布车库销售监管通知:违规者暂停网签资格','[紧要的]中国对印连发强硬信息,印度急切需要结束对峙']#定义一个简单的正则表达式#需要注意的是这里的是转义字符(在正则表达式中[]式特殊符号)regex4="^[[重紧]..]"#使用。把测试文档进行分割p_string=text_string.split("。")#对分割后的句子进行遍历,找出与正则表达式匹配的句子for line in text_string2: if re.search(regex4, line) is not None: print("符合regex4:"+line)

结果

符合regex4:[重要的]今年第七号台风23日登录广东东部沿海地区 符合regex4:[紧要的]中国对印连发强硬信息,印度急切需要结束对峙

假如你要匹配“”,那么编程语言表示的正则表达式就需要“”(前两个和后两个分别用于在编程语言里转义为反但斜杠,转成两个反但斜杠后再在正则表达式里转义为一个反斜杠),然而在python中使用r""即可解决。

例如:

import reif re.search(r