正则表达式基础

简介:**在自然语言处理中,文本数据通常含有很多无关和无意义字符,比如链接、@符号等,通常叫做噪声,这些噪声会影响我们的nlp任务,所以我们一般会用正则表达式去匹陪字符并删除。

在使用正则表达式的时候需要导入re模块,本次使用re.search匹配字符串。

正则表达式匹配字符串:

在python中,我们使用re.search(regex,string)方法匹配字符串,通过这个方法,我们可以查看string中是否匹配正则表达式regex,如果能够匹配,则返回匹配到的对象,如果不能匹配到则返回None。

1.简单匹配

import re

string = '哈工大的语言技术平台 (LTP)提供了中文分词、依存句法分析、语义角色标注等丰富、精准的自然语言处理技术。NLTK 是一款著名的 Python 自然语言处理工具包。在其收集的大量公开数据集、模型上提供了全面、易用的接口,命名实体识别(Named Entity Recognition, NER)、句法分析(Syntactic Parse)等各项 NLP 领域的功能。'

regex = 'LTP'#匹配字符

p = string.split('。')

for line in p:

if re.search(regex,line) is not None:

print(line)

2."."代表匹配任意一个字符

import re

string = '哈工大的语言技术平台 (LTP)提供了中文分词、依存句法分析、语义角色标注等丰富、精准的自然语言处理技术。NLTK 是一款著名的 Python 自然语言处理工具包。在其收集的大量公开数据集、模型上提供了全面、易用的接口,命名实体识别(Named Entity Recognition, NER)、句法分析(Syntactic Parse)等各项 NLP 领域的功能。'

regex = 'NLTK.'#匹配NLTK+后面任意1个个字符

p = string.split('。')

for line in p:

if re.search(regex,line) is not None:

print(line)

3.“^”以某个字符串开始

import re

string = '哈工大的语言技术平台 (LTP)提供了中文分词、依存句法分析、语义角色标注等丰富、精准的自然语言处理技术。NLTK 是一款著名的 Python 自然语言处理工具包。在其收集的大量公开数据集、模型上提供了全面、易用的接口,命名实体识别(Named Entity Recognition, NER)、句法分析(Syntactic Parse)等各项 NLP 领域的功能。'

regex = '^哈工大'#以哈工大开始的,^以某个字符串开始的

p = string.split('。')

for line in p:

if re.search(regex,line) is not None:

print(line)

4.“$”以某个字符串结束的

import re

string = '哈工大的语言技术平台 (LTP)提供了中文分词、依存句法分析、语义角色标注等丰富、精准的自然语言处理技术。NLTK 是一款著名的 Python 自然语言处理工具包。在其收集的大量公开数据集、模型上提供了全面、易用的接口,命名实体识别(Named Entity Recognition, NER)、句法分析(Syntactic Parse)等各项 NLP 领域的功能。'

regex = '功能$'#以功能结束的,$以某个字符串结束的

p = string.split('。')

for line in p:

if re.search(regex,line) is not None:

print(line)

5“[]”中括号匹配多个字符,比如"[我你]们"代表的匹配的字符串是“我们”和“你们”

import re

string = '哈工大的语言技术平台 (LTP)提供了中文分词、词法分析、语义角色标注等丰富、精准的自然语言处理技术。NLTK 是一款著名的 Python 自然语言处理工具包。在其收集的大量公开数据集、模型上提供了全面、易用的接口,命名实体识别(Named Entity Recognition, NER)、句法分析(Syntactic Parse)等各项 NLP 领域的功能。我爱自然语言处理。'

regex = '[句词]法'#中括号匹配多个字符

p = string.split('。')

for line in p:

if re.search(regex,line) is not None:

print(line)

6.通过正则表达式匹配年份

"[0-9]“代表的是从0到9的所有数字,”[a-z]"代表的是从a到z的所有小写字母。首先我们定义一个list分配给一个变量strings,匹配的年份是在1000年~2999年之间。

import re

string = ['War of 1812 ','there are 5280 feet to mile','happy new year 2016!']

regex = '[1-2][0-9]{3}'#



for line in string:

if re.search(regex,line) is not None:

print(line)

输出:

War of 1812 

happy new year 2016!

匹配字符串中的数字部分,并且是在1000~2999之间,{3}代表的是重复之前的[0-9]三次,是[0-9][0-9][0-9]的简写

7.抽取所有年份

我们使用python中的re模块的另一个方法fiandall来返回匹配带正则表达式的那部分字符串。

import re

string = '2016 is a good year,but 2017 will be better!'

years = re.findall('[2][0-9]{3}',string)

print(years)

输出:['2016', '2017']
  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值