前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >基于Python的语料库数据处理(五)

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

作者头像
陆勤_数据人网
发布2021-01-13 10:35:22
8920
发布2021-01-13 10:35:22
举报

| 段洵

2320字 | 10 分钟阅读

一起来学习用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()方法用来检索某个字符串,并返回与正则表达式匹配的第一个结果。

代码语言:javascript
复制
re.search(pattern, string)

2. re.findall()

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

代码语言:javascript
复制
re.findall(pattern, string)

3.re.sub()

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

代码语言:javascript
复制
re.sub(pattern, replacement, string)

二、普通字符

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

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

代码语言:javascript
复制
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

匹配所有字母、数字、空白和除换行符以外的任意字符 匹配任意字母或数字或下划线 匹配任意空白 匹配任意数字 匹配非字母和非数字字符(不匹配下划线)匹配非空白 匹配非数字 匹配单词的开始或结束

范例:

代码语言:javascript
复制
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。

本文参与 腾讯云自媒体分享计划,分享自微信公众号。
原始发表:2021-01-09,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 数据科学与人工智能 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体分享计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档