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

文本内容如下:

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. Javascript内存泄露

    在过去一些的时候,Web开发人员并没有太多的去关注内存泄露问题.那时的页面间联系大都比较简单,并主要使用不同的连接地址在同一个站点中导航,这样的设计方式是非常有利于浏览器释放资源的.即使Web页面运行 ...

  2. Azure ARM (11) ARM模式下,创建虚拟机并配置负载均衡器

    <Windows Azure Platform 系列文章目录> 本文内容比较多,请大家仔细阅读,谢谢! 在前几章中,我们做了准备工作: 1.创建ARM Resouce Group,叫Lei ...

  3. No compiler is provided in this environment. Perhaps you are running on a JRE rather than a JDK?

    以前用MyEclipse,现在用eclipse配置maven后,运行run install.报错: [ERROR] No compiler is provided in this environmen ...

  4. resin4的初次配置与使用

    之前用的resin3,结果发布新项目老师文件冲突,我也找不到是哪里有问题,于是尝试使用resin4. 首先从官网下载最新resin4. 然后放到opt下,tar -zvxf 解压. 然后修改conf/ ...

  5. Python性能提升小技巧

    第一部分 1-使用内建函数: 你可以用Python写出高效的代码,但很难击败内建函数. 经查证. 他们非常快速 2-使用 join() 连接字符串. 你可以使用 + 来连接字符串. 但由于string ...

  6. List<T>保存为XML文件

    今天我们学习怎样把List<T>写成一个XML文件保存起来.因为我们在做动态网站开发时,需要对一些不太常变化的数据产生为XML文件,让程序直接去读取,而不是每次是SQL数据库取. 为了解决 ...

  7. 如果你恨一个程序员,忽悠他去做iOS开发

    如果你恨一个程序员,忽悠他去做iOS开发.不管他背景是cobel还是 java,送他一本iOS开发的书.这种书最好是国人写的,容易以偏概全一点,相比洋鬼子的书,更容易学到皮毛.这叫舍不得孩子套不着狼, ...

  8. ASP.NET Core开发-使用Nancy框架

    Nancy简介 Nancy是一个轻量级的独立的框架,下面是官网的一些介绍: Nancy 是一个轻量级用于构建基于 HTTP 的 Web 服务,基于 .NET 和 Mono 平台,框架的目标是保持尽可能 ...

  9. 火狐浏览器+Firebug+FirePath测试Xpath

    前言 抓取网页数据时使用HtmlAgilityPack分析,需要通过xpath定位页面元素.如果有个xpath的生成和验证工具就事半功倍了,火狐浏览器插件FirePath配合Firebug就能完美实现 ...

  10. html5学习笔记(2)

    效果图 以下为源码 <!DOCTYPE html> <html> <head lang="en"> <meta charset=" ...