正则表达式

在自然语言处理任务中,会经常用到正则表达式,在数据预处理部分对数据清洗。提取到“干净”的数据用于后续的建模,平时都是用到正则表达式直接查询,在这里总结一下正则表达式的内容,方便记忆和查询。

一、常见的正则表达式

常见的正则表达式大家可以自己找,这里给一个地址,供大家参考。在python中,re模块提供了正则表达式的功能。

二、python的re模块

2.1 正则函数

2.1.1 re.match函数

    函数试图从字符串的起始部分对模式进行匹配,如果匹配成功,就返回一个匹配对象,如果匹配失败,就返回None。

    

2.1.2 re.search函数

    函数扫描整个字符串并返回第一个成功的匹配,如果匹配成功re.search方法返回一个匹配的对象,否则返回None。

    

2.1.3  re.sub函数

    函数用于替换字符串中的匹配项。

    re.sub(pattern, repl, string, count=0, flags=0)

    repl参数可以为替换的字符串,也可以为一个函数。

          如果repl是字符串,那么就会去替换字符串匹配的子串,返回替换后的字符串;

          如果repl是函数,定义的函数只能有一个参数(匹配的对象),并返回替换后的字符串。

    

 

    count可指定替换次数,不指定时全部替换。

    

    repl可以为一个函数。

    

2.1.4 re.subn函数

    和sub函数差不多,但是返回结果不同,返回一个元组“(新字符串,替换次数)

    

2.1.5  re.compile函数

    compile 函数用于编译正则表达式,生成一个正则表达式( Pattern )对象,供 match() 和 search() 这两个函数使用。如果匹配成功则返回一个Match对象

2.1.6 findall函数

    在字符串中找到正则表达式所匹配的所有子串,并返回一个列表,如果没有找到匹配的,则返回空列表

    

2.1.7 re.finditer函数

    在字符串中找到正则表达式所匹配的所有子串,并把它们作为一个迭代器返回

    

2.1.8  re.split函数

    split 方法用pattern做分隔符切分字符串,分割后返回列表。如果用'(pattern)',那么分隔符也会返回

    

2.2 re模块调用

re模块一共有两种调用方式:

方法1:

    直接使用上面介绍的 re.match, re.search 和 re.findall 等函数对文本进行匹配查找

方法2:

(1)使用compile 函数将正则表达式的字符串形式编译为一个 Pattern 对象;

(2)通过 Pattern 对象提供的一系列方法对文本进行匹配查找,获得匹配结果(一个 Match 对象);

(3)最后使用 Match 对象提供的属性和方法获得信息,根据需要进行其他的操作。

接下来重点介绍compile函数。

    re.compile函数用于编译正则表达式,生成一个Pattern对象

2.2.1 match函数

    Pattern对象:match(string[, pos[, endpos]])

    其中,string 是待匹配的字符串,pos 和 endpos 是可选参数,指定字符串的起始和终点位置,默认值分别是 0 和 len (字符串长度)。因此,当不指定 pos 和 endpos 时,match 方法默认匹配字符串的头部。当匹配成功时,返回一个 Match 对象,如果没有匹配上,则返回 None。

    

    若匹配成功,返回一个match对象。

         group([0, 1, 2,...]): 可返回一个或多个分组匹配的字符串,若要返回匹配的全部字符串,可以使用group()或group(0);

         start(): 匹配的开始位置;

         end(): 匹配的结束位置;

         span(): 包含起始、结束位置的元组。等价于(start(), end());

         groups(): 返回分组信息。等价于(m.group(1), m.group(2));

         groupdict(): 返回命名分组信息。

2.2.2  search函数

    Pattern对象:search(string[, pos[, endpos]])

    

2.2.3  findall函数

    Pattern对象:findall(string[, pos[, endpos]])

    findall 以列表形式返回全部能匹配的子串,如果没有匹配,则返回一个空列表

    

2.2.4 finditer函数

    Pattern对象:finditer(string[, pos[, endpos]])

    finditer 函数与 findall 类似,但是它返回每一个匹配结果(Match 对象)的迭代器

    

2.2.5 split函数

    Pattern对象:split(string[, maxsplit]])

    maxsplit 可指定分割次数,不指定将对字符串全部分割

   

2.2.6  sub函数

    Pattern对象:sub(repl, string[, count])

    当repl为字符串时,可以用\id的形式引用分组,但不能使用编号0;当repl为函数时,返回的字符串中不能再引用分组

    

2.2.7  subn函数

     Pattern对象:subn(repl, string[, count])

     返回一个元组,元组第一个元素和sub函数的结果相同,元组第二个元素返回替换次数

     

2.2.8 两种方法的毕竟

    未采用compile的方法,每次都编译,效率低;采用compile只需要编译一次,效率高。

三、贪婪匹配

    正则表达式匹配时默认的是贪恋匹配,也就是会尽可能多的匹配更多字符。如果想使用非贪恋匹配,可以在正则表达式中加上'?'

    

四、分组

    如果你想要提取子串或是想要重复提取多个字符,那么你可以选择用定义分组的形式。用()就可以表示要提取的分组(group)

    正则表达式'(\d{4})-(\d{3, 8})$'表示匹配两个分组,第一个分组(\d{4})是一个有4个数字的子串,第二个分组(\d{3,8})表示匹配一个数字子串,子串长度为3到8之间

五、正则表达式修饰符

    re.I     忽略大小写

    re.L     做本地化识别匹配

    re.M    多行匹配,影响^和$

    re.S     单行,'.'匹配包括换行符在内的所有字符

    re.U     根据Unicode字符集解析字符,影响\w, \W, \b, \B

    re.X     忽略多余空白符

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值