Python正则表达式使用实例
最近做题需要使用正则表达式提取信息,正则表达式很强大,之前都是纸上谈兵,这次刚好动动手,简单实现下:
文本内容如下:
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正则表达式使用实例的更多相关文章
- Python 正则表达式语法实例
- Python正则表达式如何进行字符串替换实例
Python正则表达式如何进行字符串替换实例 Python正则表达式在使用中会经常应用到字符串替换的代码.有很多人都不知道如何解决这个问题,下面的代码就告诉你其实这个问题无比的简单,希望你有所收获. ...
- python 正则表达式实例
字符匹配 实例 描述 python 匹配 "python". 字符类 实例 描述 [Pp]ython 匹配 "Python" 或 "python&qu ...
- 比较详细Python正则表达式操作指南(re使用)
比较详细Python正则表达式操作指南(re使用) Python 自1.5版本起增加了re 模块,它提供 Perl 风格的正则表达式模式.Python 1.5之前版本则是通过 regex 模块提供 E ...
- Python正则表达式学习摘要及资料
摘要 在正则表达式中,如果直接给出字符,就是精确匹配. {m,n}? 对于前一个字符重复 m 到 n 次,并且取尽可能少的情况 在字符串'aaaaaa'中,a{2,4} 会匹配 4 个 a,但 a{2 ...
- Python 正则表达式-OK
Python正则表达式入门 一. 正则表达式基础 1.1. 简单介绍 正则表达式并不是Python的一部分. 正则表达式是用于处理字符串的强大工具, 拥有自己独特的语法以及一个独立的处理引擎, 效率上 ...
- Python天天美味(15) - Python正则表达式操作指南(re使用)(转)
http://www.cnblogs.com/coderzh/archive/2008/05/06/1185755.html 简介 Python 自1.5版本起增加了re 模块,它提供 Perl 风格 ...
- [转] Python正则表达式指南
本文介绍了Python对于正则表达式的支持,包括正则表达式基础以及Python正则表达式标准库的完整介绍及使用示例.本文的内容不包括如何编写高效的正则表达式.如何优化正则表达式,这些主题请查看其他教程 ...
- python 正则表达式汇总
一. 正则表达式基础 1.1.概念介绍 正则表达式是用于处理字符串的强大工具,它并不是Python的一部分. 其他编程语言中也有正则表达式的概念,区别只在于不同的编程语言实现支持的语法数量不同. 它拥 ...
随机推荐
- PHP面试出场率较高的题目<转载>
--------------------PHP部分--------------------- PHP中几个输出函数echo,print(),print_r(),sprintf(),var_dump() ...
- [Node.js] Node.js中的流
原文地址:http://www.moye.me/2015/03/29/streaming_in_node/ 什么是流? 说到流,就涉及到一个*nix的概念:管道——在*nix中,流在Shell中被实现 ...
- 一个java页游服务器框架
一.前言 此游戏服务器架构是一个单服的形式,也就是说所有游戏逻辑在一个工程里,没有区分登陆服务器.战斗服务器.世界服务器等.此架构已成功应用在了多款页游服务器 .在此框架中没有实现相关业务逻辑,只有简 ...
- helper实现隐藏前台特效
想实现下面的功能:如下图所示 点击已结束按钮,使上面的红色跳转到已结束活动按钮上面,本来前台代码里面是使用了一个action来实现的,但是我改了点东西,使跳转不了. 前台代码 <ul class ...
- 我的vim配置文件
强烈拥护开源精神,高举开源大旗,今天我就分享下我自己结合网上还有自己实际使用配的vimrc,可以给各位参考下,不要见笑,具体说明我在rc里写的也很详细,可以具体看下,也希望可以借这个机会能多认识认识几 ...
- C#控件绑定数据源方式
1:控件数据源绑定泛型Dictionary<string,string> ): Dictionart<string,string> D=new Dictionary(strin ...
- 会员管理系统的设计和开发(2)-- RDLC报表的设计及动态加载
在上篇<会员管理系统的设计和开发(1)>介绍了关于会员系统的一些总体设计思路和要点,经过一段时间开发,软件终于完成并发布.在这期间,碰到了不少技术难点,并积累了不少开发心得和经验,本篇继续 ...
- 图说hibernate注释--xml里配置参数(一)
****************************************************************************************[来自我另一博文]
- 优秀的技术Leader
在一个"情怀"已经泛滥的年代里,任何拿着"情怀"出来说事的人都不太受待见.犀利者会吐槽:"我早已看穿了一切". 但你是否想过,如果这世界所有 ...
- Bash脚本实现批量作业并行化
http://jerkwin.github.io/2013/12/14/Bash%E8%84%9A%E6%9C%AC%E5%AE%9E%E7%8E%B0%E6%89%B9%E9%87%8F%E4%BD ...