正则表达式是一种定义了搜索模式的特征序列,主要是用于字符串的模式匹配,或是字符的匹配。随着计算机的普及以及互联网的发展,大量的信息以电子文档的方式呈现在人们的眼前。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