python中正则表达式的使用

程序中经常要对字符串进行处理,处理用户的输入,对文本的编辑等等,都是对字符串的操作,对字符串的操作可以使用正则表达式来进行,正则表达式的使用会使得字符串的处理很方便。

这里就总结下python中的正则表达式,以及主要的用法。
首先\d,\s,\w,. 这四个表达式可以匹配单个字符,其中\d可以匹配任意一个数字0-9,\s可以匹配任意的空白字符,比如空格,tab键等等,\w可以匹配一个数字或者字母,而.可以匹配任意字符。

'\d\s\d' 可以匹配“9 9”,也可以匹配"8 1"等类似形式的串,但是"a 9"这种就无法匹配了
'\w\d' 可以匹配"a9",'99','09','b1'等形式字串,但不能匹配' 9','9a'等形式
'.\w.' 可以匹配"c90", "(a]"等形式

另外就是几个表示长度可变的符号,+,*,?,{n},{n,m},这里+表示一个或多个即>=1,而*表示0个或多个即>=0,?表示0个或1个,{n}确切的表示n个,{n,m}则表示n到m个。

'\d{5,12}可以匹配5-12位的数字序列
'\s+'可以匹配至少一个空白字符
'1\w?'可以匹配以1开头,后面跟一个或者0个字母数字

然后就是候选性匹配,限定候选集,使用[]来表示,[]中的内容为所有候选集,比如匹配abc三个字母中的一个可以使用[abc]或者[a-c]都可以。

'[a-z]+'可以匹配至少包含该一个字母的字符串,该字符串中所有的字符均是a-z这26个字母。
'[a-z0-9]+'这个就类似于'\w+',表示可以匹配有字母和数字组成的字符串,而且长度至少为1

还有选择匹配|,A|B表示匹配A或者匹配B,如我们向匹配”Yes”或者”yes”,则可以如下表示

'(Y|y)es'

以上是正则表达式的简单语法,下面说下在python中的运用
python中提供了re模块来提供对正则表达式的支持,所以要先引入re模块然后使用re模块中的方法进行匹配或者分组或者提取字串。

1.匹配

re.match(pattern, str)  #使用pattern来匹配str,如果匹配成功返回一个Match对象,否则返回None

所以可以通过判断match返回的对象是否为None来判断是否匹配成功。如下是匹配一个串是否是一个qq号,当然前后可能有空白字符,我们要过滤掉。

if re.match(r'\s*\d{5,12}\s*', '   845724432   '):
    print('Yes, it might be a qq code')
else:
    print('No, it\'s not a qq code')

2.分组

这个功能确实非常实用,我们在分割字符串的时候可以用这个更好的进行分割。
str中有个split方法,该方法要求传入分割字符来进行分割,实际使用的时候会有很多不方便,比如我们用三种字符来分割的时候往往就不好办了,另外,分割的时候可以以多个分割字符作为界限分割时往往也会有问题,比如对于’a,,b,c,d e; f’我想通过分割得到[‘a’, ‘b’, ‘c’, ‘d’, ‘e’, ‘f’]的时候使用str提供的split就很麻烦了,但是这时候可以使用re提供的split来进行分,如下

import re

l = re.split(r'[\s,;]+', 'a,,b,c,d  e; f')
print(l)

这就是说我们以一个或多个空白字符或者,或者;来对字符串进行分割,这就能达到我们想要的效果。

3.提取字串

正则表达式在match的时候通过加括号,可以将匹配成功的串中提取出需要的字串。
比如’\s*\d{5,12}\s*’匹配qq号的那个正则式,我们可以加个括号,从而在匹配成功的时候同时把qq号提取出来。

s = re.match(r'\s*(\d{5,12})\s*', '   845724432   ')
if s:
    print('Yes, it might be a qq code, the qq is %s' % s.group(1))
else:
    print('No, it\'s not a qq code')

这段会输出:Yes, it might be a qq code, the qq is 845724432

以上就是简单说明了一下python中正则表达式的引用,感觉有用,欢迎点击一下侧栏广告支持一下,谢谢。

本文遵从CC3.0协议转载请注明:转自凌风技术站

本文标题:python中正则表达式的使用

本文链接地址:http://www.iaccepted.net/python/tutorial/59.html

相关文章



发表评论

电子邮件地址不会被公开。 必填项已用*标注