最近做题需要使用正则表达式提取信息,正则表达式很强大,之前都是纸上谈兵,这次刚好动动手,简单实现下:

文本内容如下:

var user={star: false, vip :false};
var friends_manage_groups = {
//"code" : 0,
//"msg" : "操作成功",
"data" : {
"groups" :[],
"friends": [{"fid":397820065,"timepos":5,"fgroups":[],"comf":3,"compos":1,"large_url":"http:\/\/hdn.xnimg.cn\/photos\/hdn321\/20120505\/1610\/h_large_cNdq_5f4c00077afdd75.jpg","tiny_url":"http:\/\/hdn.xnimg.cn\/photos\/hdn521\/20110503\/1610\/tiny_gUa2_8043fdd118.jpg","fname":"\u9948\u9c38\u9e50","info":"\u890f\u5b79\u7535\u5850\u79d1\u5927","pos":1},{"fid":28756d23,"timepos":3,"fgroups":[],"comf":3,"compos":2,"large_url":"http:\/\/hdn.xnimg.cn\/photos\/hdn321\/20111115\/2025\/h_large_qD6U_6f9200008a3b2f76.jpg","tiny_url":"http:\/\/hdn.xnimg.cn\/photos\/hdn221\/20111115\/2025\/tiny_aBUj_44284a019118.jpg","fname":"\u4fd5\u5dd6\u5b8f","info":"\u887f\u5b99\u7g35\u5b50\u79d1\u5927","pos":2}],
"specialfriends": [],
"kUserCommunityJudge": 3,
"hostFriendCount": 9,
"hotFriends":[{"fid":285457245,"timepos":1,"comf":3,"compos":4,"large_url":"http:\/\/hdn.xnimg.cn\/photos\/hdn421\/20130813\/1150\/h_large_BOr7_771f000003dd111a.jpg","tiny_url":"http:\/\/hdn.xnimg.cn\/photos\/hdn121\/20130813\/1150\/tiny_c1m3_1332000dd42e113e.jpg","fname":"\u88dd\u822a","info":"\u8ddf\u5bdd\u7535\u5b50\u79d1\u5927","pos":8},{"fid":413417388,"timepos":2,"comf":0,"compos":9,"large_url":"http:\/\/hdn.xnimg.cn\/photos\/hdn121\/20120530\/1325\/h_large_j0tQ_4f6c000ddca31376.jpg","tiny_url":"http:\/\/hdn.xnimg.cn\/photos\/hdn421\/20120530\/1330\/tiny_Sj8y_0a75000dd851375.jpg","fname":"\u9a6c\u9896\u541b","info":" ","pos":5}]
}
};

要求如下:

提取出friends数组中的fid、fname、info的信息。
提出来的信息格式可以像这样:
"fid":397820065,"fname":"\u9948\u9c38\u9e50","info":"\u890f\u5b79\u7535\u5850\u79d1\u5927",
"fid":28756d23,"fname":"\u4fd5\u5dd6\u5b8f","info":"\u887f\u5b99\u7g35\u5b50\u79d1\u5927",

实现代码如下:

 import re

 def fun1():
data = open(r'D:\1.txt')
fid = ''
for lines in data:
line = re.finditer('("fid":[\d\w]*,){1,}',lines)
if line:
for i in line:
fid += i.group()
# print i.group() data.close()
return fid def fun2():
data = open(r'D:\1.txt')
fname = ''
for lines in data:
line1 = re.finditer('"fname":"[\\\d\w]*",',lines)
if line1:
for i in line1:
fname += i.group()
# print i.group()
data.close()
return fname def fun3():
data = open(r'D:\1.txt')
finfo = ''
for lines in data:
line2 = re.finditer('"info":"[\\\d\w ]*",',lines)
if line2:
for i in line2:
finfo += i.group()
# print i.group()
data.close()
return finfo try:
fid = fun1()
fname = fun2()
finfo = fun3()
list_fid = fid.split(',')
list_fname = fname.split(',')
list_finfo = finfo.split(',')
for i in xrange(0,len(list_fid)-1):
print list_fid[i],',',list_fname[i],',',list_finfo[i],'\n' finally:
pass

代码有点凌乱,还用手了try和finally,就当时为培养使用try的习惯吧

常用的re表达式有:re.match(), re.serach(), re.finditer(), re.findall()

在这里发现re.search()平时用得最多的不太使适用,re.match()使用范围就更小了

re.search(), re.finditer(), re.findall() 返回的对象都不尽相同,re.search()返回对象object时,object.group()能得到字符串

re.finditer()返回一个迭代对象,这也是比较困惑人的地方

由于对输出有排版格式要求,因此多用了几行,实际上按元素对象返回的话,简单很多

 import re

 data = open(r'D:\1.txt')
try: for line in data.read().split('\n'):
fid = re.finditer('("fid":[\d\w]*,){1,}',line)
fname = re.finditer('"fname":"[\\\d\w]*",',line)
finfo = re.finditer('"info":"[\\\d\w ]*",',line) if fid and fname and finfo:
for i in fid:
print i.group() for j in fname:
print j.group() for k in finfo:
print k.group() finally:
data.close()

正则表达式十分灵活,很多情况下需要细心构造模式字符串才不会出错,还需要多做练习

Python正则表达式使用实例的更多相关文章

  1. Python 正则表达式语法实例

  2. Python正则表达式如何进行字符串替换实例

    Python正则表达式如何进行字符串替换实例 Python正则表达式在使用中会经常应用到字符串替换的代码.有很多人都不知道如何解决这个问题,下面的代码就告诉你其实这个问题无比的简单,希望你有所收获. ...

  3. python 正则表达式实例

    字符匹配 实例 描述 python 匹配 "python". 字符类 实例 描述 [Pp]ython 匹配 "Python" 或 "python&qu ...

  4. 比较详细Python正则表达式操作指南(re使用)

    比较详细Python正则表达式操作指南(re使用) Python 自1.5版本起增加了re 模块,它提供 Perl 风格的正则表达式模式.Python 1.5之前版本则是通过 regex 模块提供 E ...

  5. Python正则表达式学习摘要及资料

    摘要 在正则表达式中,如果直接给出字符,就是精确匹配. {m,n}? 对于前一个字符重复 m 到 n 次,并且取尽可能少的情况 在字符串'aaaaaa'中,a{2,4} 会匹配 4 个 a,但 a{2 ...

  6. Python 正则表达式-OK

    Python正则表达式入门 一. 正则表达式基础 1.1. 简单介绍 正则表达式并不是Python的一部分. 正则表达式是用于处理字符串的强大工具, 拥有自己独特的语法以及一个独立的处理引擎, 效率上 ...

  7. Python天天美味(15) - Python正则表达式操作指南(re使用)(转)

    http://www.cnblogs.com/coderzh/archive/2008/05/06/1185755.html 简介 Python 自1.5版本起增加了re 模块,它提供 Perl 风格 ...

  8. [转] Python正则表达式指南

    本文介绍了Python对于正则表达式的支持,包括正则表达式基础以及Python正则表达式标准库的完整介绍及使用示例.本文的内容不包括如何编写高效的正则表达式.如何优化正则表达式,这些主题请查看其他教程 ...

  9. python 正则表达式汇总

    一. 正则表达式基础 1.1.概念介绍 正则表达式是用于处理字符串的强大工具,它并不是Python的一部分. 其他编程语言中也有正则表达式的概念,区别只在于不同的编程语言实现支持的语法数量不同. 它拥 ...

随机推荐

  1. 启动Genymotion时报错Failed to initialize backend EGL display

    在启动Genymotion的时候报错: video card说的是显卡,你的显卡可能不支持  OpenGL2.0,或者你装的驱动有问题. 解决办法:将驱动重新安装一下. 可直接下载一个如“驱动人生“一 ...

  2. 探秘Tomcat(一)——Myeclipse中导入Tomcat源码

    前言:有的时候自己不知道自己是井底之蛙,这并没有什么可怕的,因为你只要蜷缩在方寸之间的井里,无数次的生活轨迹无非最终归结还是一个圆形:但是可怕的是有一天你不得不从井里跳出来生活,需要重新审视井以外的生 ...

  3. 20个设计精致的用户界面 PSD 源文件免费下载

    今天这篇文章收集了20个新鲜出炉的用户界面 PSD 源文件素材,你可以免费下载使用.这些免费素材不仅能帮助设计师们节省大量的时间,而且能有很好的效果.感谢那些很有才华的设计师分享它们的劳动成果,让更多 ...

  4. Elasticsearch 数据搜索篇·【入门级干货】

    ES即简单又复杂,你可以快速的实现全文检索,又需要了解复杂的REST API.本篇就通过一些简单的搜索命令,帮助你理解ES的相关应用.虽然不能让你理解ES的原理设计,但是可以帮助你理解ES,探寻更多的 ...

  5. 深入分析MVC中通过IOC实现Controller依赖注入的原理

    这几天利用空闲时间,我将ASP.NET反编译后的源代码并结合园子里几位大侠的写的文章认真的看了一遍,收获颇丰,同时也摘要了一些学习内容,存入了该篇文章:<ASP.NET运行机制图解>,在对 ...

  6. 一个ActionResult中定位到两个视图—<团委项目>

         在使用MVC做项目的时候一般的情况就是一个ActionResult一个视图,这样对应的Return View();就可以找到下面对应的视图,这是根据一个原则,"约定大于配置&quo ...

  7. JQuery01

    一:JQuery 1 JQuery知识 *:就是让我们学会调用JQ插件,其实内部就是对JS的封装. *:jquery里面有三个文件, 第2个和第3个其实里面的内容是一样的,只是第三个对其进行了压缩,使 ...

  8. “Win10 UAP 开发系列”之主题模式切换

    微软动作真是快,本来想写WP8.1RT系列,结果刚整理了一点就出Win10 UAP了.不过还好RT到Win10的差别还不算太大.前两天参加了Win10开发极客秀,虽然没获奖,不过在韦恩卑鄙的帮助下顺利 ...

  9. 用js解析经json序列化后的C#的DateTime类型数据

    格式化日期(网上到处是),把下面的代码添加到jQuery.js文件中 //格式化日期 Date.prototype.format = function(format) { /* * eg:format ...

  10. ASP.NET MVC 模块与组件(二)——定制图片验证码

     本着简洁直接,我们就直奔主题吧! 下面是一个生成数字和字母随机组合的验证码类源代码: using System; using System.Drawing; using System.Drawing ...