python正则表达学习

要想学习基础的,可以看看别人写的很全的一篇:http://www.cnblogs.com/huxi/archive/2010/07/04/1771073.html

图列出了Python支持的正则表达式元字符和语法,是别人整理出来,要多看几次,用几次,记住了就会好了:


因为不喜欢教科书的方式,这里不会有很全的知识说明,也不什么基础的,我就拿自己学习到的东西分享下:

直接上例子:

01-19 18:13:47.203 I/ActivityManager(  410): Displayed com.xxxx.xx/com.y: +5s159ms (total +8s324ms)

筛选上面 字体串的5s159ms并计算成5159ms

import re
time_list = []
text_file = "01-19 18:13:47.203 I/ActivityManager(  410): Displayed com.xxxx.xx/com.y: +5s159ms (total +8s324ms)"     
data = re.findall(r'\+([\d]+)s?([\d]+)ms+\s',str(text_file))
print data
for res in data:
    match_data = res[0]*(1 if res[1]>0 else 0) + res[1]
    time_list.append(match_data)
print  time_list

'\+([\d]+)s?([\d]+)ms+\s'
这个就是这个正则匹配的字符串,这里解释下吧:

这里用findall得到的是一个列表,但加了(),就会在列表中多了元组,eg:[(x,x),(y,y)]

\+就是正常的加号,([\d]+)s?是匹配5s的5的表达式,([\d]+)ms+\s是匹配519ms中519数字的加一个空格的方式,如果没有这个空格,就会匹配到后面的那个8s324ms

存入元组后再用res[0]*(1 if res[1]>0 else 0) + res[1]的方式,把s的数值和ms的数值结合起来,就成了我们要的数值。

其实这个运行的时候有个问题:就是如果时间是+159ms的时候,生成的列表中的元组是[('15', '9')],是1s159ms生成的列表元组是[('1', '159')],前面的情况我自己也有点想不明白,但是也可以解决问题,有时间的时候慢慢看下这个原因吧。,上面用time_list这个数组的原因是但有多行字符串的时候,用列表存入筛选的时间,这个例子就完成了。


下面这个例子不全,但是对我有用的:

在多行字符串中选出:

nm=77_1&jdhs=1421661372948&d2er=2100501039&value=206

三个方法:

第二个方法先出来 的是整行,第一个和第三个方法选出来的是value的值

data123 = []
re1='(nm)'  # Word 1
re2='(=)'   # Any Single Character 1
re3='(77)'  # Integer Number 1
re4='(_)'   # Any Single Character 2
re5='(1)'   # Integer Number 2
re6='.*?'   # Non-greedy match on filler
re7='(value)'   # Word 2
re8='(=)'   # Any Single Character 3
re9='(\\d+)'    # Integer Number 3
print re1+re2+re3+re4+re5+re6+re7+re8+re9
rg = re.compile(re1+re2+re3+re4+re5+re6+re7+re8+re9,re.IGNORECASE|re.DOTALL)
upload_data = rg.findall(str(text_file))

for cycle_num in range(len(upload_data)):
    data123.append(upload_data[cycle_num][7])
print data123
<pre name="code" class="python">
#方法二
rg = re.compile(r'nm=77_1.*?value=\d+',re.IGNORECASE|re.DOTALL)data1 = rg.findall(str(text_file))<pre name="code" class="python">print data1
 
 

#方法三
data = re.findall(r'nm=77_1.*?value=?(\d+)',str(text_file))
print data


 



评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值