python 正则表达式提取中文字符的问题

2015-09-09 18:47:33 +08:00
 ri0day
我有一个文件里面包含了中英文以及中文标点,如下:(注意里面的冒号和括号是中文全角的)


vagrant@vagrant-ubuntu-trusty-64:~/email_bot$ cat msg.txt
开通数据库


用户:xx盛源地产(1店)
数据库文件:AgencyDByjsydc.rar
vagrant@vagrant-ubuntu-trusty-64:~/email_bot$

----------------------------------------
我希望输出
{'title' : '开通数据库','client':'xx 盛源地产( 1 店)','db_data_file':'AgencyDByjsydc.rar'}

我用正则折腾了好久,得不出想要的结果,请教大家
5751 次点击
所在节点    Python
4 条回复
leavic
2015-09-10 00:52:21 +08:00
为啥要正则,每行作为一个序列,第一行直接全部做 title ,后面的直接以“:” split 去[-1]项就行了啊
ri0day
2015-09-10 01:51:27 +08:00
@leavic 忘记说明了。这个文本其实是一个邮件的 body,邮件有可能不按上面的文字顺序.也有可能会多一些文字.
不过你的方法 对上面那个格式确实可以得到我要的效果.谢谢思路

我最理想的方式是 类似 re.match ('用户:+(.*)',msg ).group ()这样
ljdawn
2015-09-10 09:13:20 +08:00
需要一个简单的文本状态机。 没匹配到另一个状态就继续。
ri0day
2015-09-10 11:04:56 +08:00
借用楼上 2 个的思路,基本弄出来了
#-coding:utf-8
d={}
with open ('msg2.txt','r') as f:
for i in f.readlines ():
if ':' not in i and not i.startswith ('\n'):
title = i
d['title'] = i
elif i.isspace ():
pass
else:
#print i.strip ()
key , value = i.split (':')
d[key] = value.strip ()

for k, v in d.items ():
print k.decode ('utf-8')+':'+v.decode ('utf-8')

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://www.v2ex.com/t/219443

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX