主要内容 #
综合实战:能使用简单的正则表达式进行文本数据的清洗,本节课主要介绍了如何使用正则表达式,在一个六级词库里面检索我们需要的单词。 资源文件:六级单词.txt(点击下载)5.单词的检索 #
un-是英语中常见的前缀,表示”不,非”的意思,以下示例使用正则表达式,从六级单词词库中检索以un-开头的单词,找一找那些以un开头的单词import re pattern=re.compile(r'\bun.*\b')#正则表达式\b用于单词开头与结尾,找出以un开头的单词,.*匹配除换行符以外的字符串 wordlist=[]#储存单词的列表 with open('六级单词.txt') as file:#打开文件注意文件路径 for line in file:#逐行读取文件 res=pattern.search(line.strip())#考虑到每行只有一个单词,使用模式对象的search()逐行检索,返回匹配对象 if res!=None:#如果匹配对象不为空 wordlist.append(res.group())#在列表中添加此单词 print(wordlist)
6.查找和替换 #
在示例1当中,虽然我们把un-开头的单词全部检索了出来,但是发现英文单词和中文解释之间有一长段空格,我们当然可以使用字符串的一些方法,比如replace()方法进行替换。 这里使用正则表达式的sub()方法,模式对象的sub()方法有两个参数,第一个参数是是一个字符串用于取代发现的匹配,第二个参数是一个字符串,是用正则表达式匹配的内容import re pattern=re.compile(r'\bun.*\b')#模式对象,检索以un开头的单词 pattern2=re.compile(r' +')#模式对象,检索多个连续的空格r' +',注意这里的加号前面有一个空格 wordlist=[]#储存字典的列表 with open('六级单词.txt') as file:#打开文件注意文件路径 for line in file:#逐行读取文件 res2=pattern2.sub(' ',line)#使用一个空格代替多个空格,并返回替换后的字符串 res1=pattern.search(res2)#考虑到每行只有一个单词,使用模式对象的search()逐行检索,返回匹配对象 if res1!=None:#如果匹配对象不为空 wordlist.append(res1.group())#在列表中添加此单词 print(wordlist)