python正则表达式(一)

看到一个编程题,就想试试,原题就不写了,我理解主要要实现的就是:输入一个字符串,包含了两个整数,中间用逗号隔开,然后把这两个整数提出来。

第一个想到的是用循环加判断,肯定能提出来,就是费事。然后又想到正则表达式应该可以,可惜只用过一次,当时也是现学现卖,然后就扔了。百度了一圈,因为不是自己写的,看的有点迷糊,最后照葫芦画瓢给实现了,今天又看了一点儿,先记录一点儿最简单的。

正则表达式要用到re模块,先写个re.match函数的应用,我第一次也是用的这个,直接上group方法,因为jmeter里经常用正则表达式提取器,对这个还是很容易理解的。

import re
line = "Cats are smarter than dogs"
matchObj = re.match(r'(.*) are (.*?) .*', line, re.M | re.I)
if matchObj:
    print ("matchObj.group() : ", matchObj.group())
    print ("matchObj.group(1) : ", matchObj.group(1))
    print ("matchObj.group(2) : ", matchObj.group(2))
else:
    print ("No match!!")

从line里截取两个单词,然后re.match(匹配的正则表达式,要匹配的字符串,标志位)

正则表达式和jmeter用的差不多,这只用了.*?就能提出对应的单词了,第一个(.*)匹配的是从开头到空格are的前面的Cats,第二个(.*?)匹配的是are空格之后,再一个空格之前的smarter,因为有问号,遇到第一个空格就停止往后取了,再后面.*就是line里最后的那些内容了。

要匹配的字符串line,这个好理解。

re.M和re.I这两个控制正则表达式的匹配方式,这里其实没这俩也是可以的,因为没换行,也没有大小写干扰。

re.I 忽略大小写
re.L 表示特殊字符集 \w, \W, \b, \B, \s, \S 依赖于当前环境
re.M 多行模式
re.S 即为 . 并且包括换行符在内的任意字符(. 不包括换行符)
re.U 表示特殊字符集 \w, \W, \b, \B, \d, \D, \s, \S 依赖于 Unicode 字符属性数据库
re.X 为了增加可读性,忽略空格和 # 后面的注释

然后输出,直接group(),就把整个正则表达式都输出来了,group(1)就是输出第一个.*表示的Cat,group(2)就是输出.*?表示的smarter。(PS:不要问我计算机里不是0表示第一个吗?我也不知道)附上输出的内容:

matchObj.group() :  Cats are smarter than dogs
matchObj.group(1) :  Cats
matchObj.group(2) :  smarter

这些就能解决一开始的问题了,但是当时比较着急,百度出的是re.split方法,这个方法能分割字符串,然后写进列表,当时百度出来的东西我现在也看不懂,就先不贴那段代码了,写一点儿我理解的。

import re
input='1,25+a!b@d e_f)g'
list=re.split('\W',input)
print (list)

输出的列表:['1', '25', 'a', 'b', 'd', 'e_f', 'g']

这个split和match用法差不多,第一个正则表达式,\W匹配非字母数字及下划线,有点拗口,就是匹配特殊符号,但是特殊符号不包括下划线,除去匹配的那些,剩下那些都提进列表了,两个数字已经分开写进列表了,用起来也简单了。

正则表达式内容太多了,今天先写这些,以后再研究再写,都学习自菜鸟教程,有不明白的可以去菜鸟教程看看,讲的很详细。


版权声明:本文为zhu940923原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接和本声明。