基于Python的语料库数据处理(五)

数据科学与人工智能

共 3413字,需浏览 7分钟

 · 2021-01-14

 是新朋友吗?记得先点数据科学与人工智能关注我哦~

《Python玩转语料库数据》专栏·第5篇

 | 段洵  

2320字 | 10 分钟阅读


【数据科学与人工智能】已开通Python语言社群,学用Python,玩弄数据,求解问题,以创价值。喜乐入群者,请加微信号shushengya360扫描文末二维码,添加为好友,同时附上Python-入群。有朋自远方来,不亦乐乎,并诚邀入群,以达相互学习和进步之美好心愿。
一起来学习用Python进行语料库数据处理吧!
今天我们学习的内容是正则表达式

一、正则表达式的概念


正则表达式 regular expression)是用来进行较复杂文本处理,特别是复杂的查找或替换处理的计算机语言。我们在进行计算机编程或者文本处理时,通常需要进行一些文本的查找、替换。如果查找或替换的工作比较复杂,就需要借助正则表达式来完成。又如,我们需要对文本进行清洁处理(如一次删除所有词性赋码)或者提取文本的特定信息时,往往也需要使用正则表达式。因此,正则表达式在语料库语言学或计算语言学研究中使用非常广泛。

如果我们需要搜索某个字符或字符串(单词),如字符i或者字符串in,则只需在文本阅读器的查找中输入in,即可查找到。但如果我们需要进行更复杂的搜索,如搜索出所有带字符i或者字符串in的单词,或者需要搜索所有以ing或ed结尾的单词时,一般搜索则无能为力就需要使用正则表达式来实现。


在 Python中使用正则表达式需要引人re模块,引入re模块需要使用 importre语 句。在引入re模块后,即可通过下列方法来使用正则表达式。

re模块常用的方法有re.search()、 re.findall()和 re.sub()等。

1.re.search()

re.search()方法的基本句法格式如下。pattern为正则表达式, string为需要检索的字符串。re.search()方法用来检索某个字符串,并返回与正则表达式匹配的第一个结果。

re.search(pattern, string)

2. re.findall()

re.findall()方法的基本句法格式如下。pattern为正则表达式, string为需要检索的字符串。re.findall()检索某个字符串,与re.search()不同的是,它返回一个列表,列表中包含与表达式匹配的所有结果。

re.findall(pattern, string)

3.re.sub()

re.sub()方法的基本句法格式如下。pattern为正则表达式,replacement为需要替换的内容, string为需要检索的字符串。re.sub()检索某个字符串(string),并将字符串中与所有表达式(pattern)匹配的内容都进行替换( replacement)。


re.sub(pattern, replacement, string)


二、普通字符


所有的字母、数字、没有特殊意义的符号(如下划线等)都是普通字符literals)。在正则表达式中,一个普通字符匹配一个与之相对应的字符书写正则表达式时,需要注意两点:一是必须首先引入re模块(import re)二是将表达式放在引号中间,引号前一般加字母r,r表示后面书写的内容是raw string,以避免转义字符等的转义。

我们来看一个例子。例子中有三个表达式对字符串'abcdbcdcd'进行检索。第一个表达式'abc'在字符串'abcdbcdcd'中可以匹配到一个结果,即'abcdbcdcd'的第一至三个字符。表达式'bc'在字符串中可以匹配到两个结果,即匹配第二至第三个字符和第五至第六个字符。表达式'cdd'则不能匹配成功,返回一个空的列表。

import re
string = 'abcdbcdcd'

# Note: usually the letter 'r' goes before a string, meaning its a 'raw string'
print(re.findall(r'abc', string))               # ['abc']
print(re.findall(r'bc', string))                # ['bc', 'bc']
print(re.findall(r'cdd', string))               # []

三、元字符


元字符(Metacharacters)或称做转义字符,是具有特殊意义的一些字符。它们具有一定的特殊意义,能够匹配某些具有特殊意义的字符。需要注意的是,一个元字符只能匹配一个字符。常用转义字符如下表所示。


字符

注释

.

 

\w

 

\s

 

\d

 

\W

 

\S

 

\D

 

\b

匹配所有字母、数字、空白和除换行符以外的任意字符

 匹配任意字母或数字或下划线

 

匹配任意空白

 

匹配任意数字

 

匹配非字母和非数字字符(不匹配下划线)

匹配非空白


 匹配非数字

 

匹配单词的开始或结束

范例:

import re

string = 'His phone number is 12345678.'

print(re.findall(r'.', string))     # ['H', 'i', 's', ' ', 'p', 'h', 'o', 'n', 'e', ' ', 'n', 'u', 'm', 'b', 'e', 'r', ' ', 'i', 's', ' ', '1', '2', '3', '4', '5', '6', '7', '8', '.']

print(re.findall(r'\w', string))    # ['H', 'i', 's', 'p', 'h', 'o', 'n', 'e', 'n', 'u', 'm', 'b', 'e', 'r', 'i', 's', '1', '2', '3', '4', '5', '6', '7', '8']

print(re.findall(r'\s', string))    # [' ', ' ', ' ', ' ']

print(re.findall(r'\d', string))    # ['1', '2', '3', '4', '5', '6', '7', '8']

print(re.findall(r'is', string))    # ['is', 'is']

print(re.findall(r'\bis', string))  # ['is']

print(re.findall(r'is\b', string))  # ['is', 'is']

print(re.findall(r'e', string))     # ['e', 'e']

print(re.findall(r'e\b', string))   # ['e']



'.'可以匹配上述文本中的任意一个字母、数字、空白和行末的句点。

'\w'可以匹配上述文本中的任意一个字母和数字,但不能匹配空白和行末的句点。

'\s'可以匹配上述文本中的任意一个空白。

'\d'd可以匹配上述文本中的任意一个数字。

'is'既可以匹配上述文本中His中的is,也可以匹配is单词。

'\bis'只能匹配上述文本中的is单词,不能匹配His中的is。

'is\b'既可以匹配上述文本中His中的is,也可以匹配is单词。

'e'既可以匹配单词 phone中的字母e,也可以匹配单词 number中的字母e;但是,'e\b'则只能匹配单词phone中的字母e。


推荐阅读:

基于Python的语料库数据处理(一)

基于Python的语料库数据处理(二)

基于Python的语料库数据处理(三)

基于Python的语料库数据处理(四)

               

公众号推荐

数据思践


数据思践公众号记录和分享数据人思考和践行的内容与故事。

Python语言群

诚邀您加入


请扫下方二维码加我为好友,备注Python-入群。有朋自远方来,不亦乐乎,并诚邀入群,以达相互学习和进步之美好心愿


浏览 29
点赞
评论
收藏
分享

手机扫一扫分享

举报
评论
图片
表情
推荐
点赞
评论
收藏
分享

手机扫一扫分享

举报