python正则表达学习
2015-01-20 15:09
267 查看
要想学习基础的,可以看看别人写的很全的一篇:http://www.cnblogs.com/huxi/archive/2010/07/04/1771073.html
图列出了Python支持的正则表达式元字符和语法,是别人整理出来,要多看几次,用几次,记住了就会好了:
因为不喜欢教科书的方式,这里不会有很全的知识说明,也不什么基础的,我就拿自己学习到的东西分享下:
直接上例子:
筛选上面 字体串的5s159ms并计算成5159ms
这里用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的值
图列出了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
相关文章推荐
- Java6学习笔记40——JAVA中的正则表达
- java 正则表达是学习
- python 学习记录(2)—re 正则表达式模块的使用
- 正则表达式学习(九)子表达的使用
- python 学习记录(10)-字符串与正则表达式
- 正则表达 4000 式学习笔记
- python正则表达
- 学习JAVA正则表达的必读篇
- Python2.7 学习笔记 (二)—— 函数,模块,正则
- Python中re(正则表达式)模块学习
- python正则表达式学习
- Python中的正则表达式学习总结
- Python模块学习 re 正则表达式
- Python re正则表达式学习
- 正则表达式语法学习(Python/Qt/Vim)
- python正则表达式学习
- Python模块学习 re 正则表达式
- Python学习(三)——正则表达式模块
- java学习——常用的正则表达
- python正则表达匹配汉字