学了点正则 还是不能匹配出聊天记录。

2018-07-20 17:16:56 +08:00
 jin6220
想把群里特定用户的聊天记录导出来
格式大概是这个样子
============================
2016-09-13 18:39:56 苹果(1234567)
这话说的,
怎么样

2016-09-13 20:40:04 香蕉(33445566)
床前明月光,疑是地上霜。

2016-09-13 21:40:26 土豆(180170160)
我睡觉去,大家继续嗨

2016-09-13 21:49:56 苹果(1234567)
举头望明月,低头思故乡。

2016-09-13 21:59:56 苹果(1234567)
现在几点了就睡?

2016-09-13 22:40:26 土豆(180170160)
太困了。
===================
比如想把苹果说过所有的话导出来,怎么个正则啊
时间匹配用的是:
\d{4}-\d{2}-\d{2}\s{1,6}\d{1,2}:\d{2}:\d{2}
自己写的表达式是:
(\d{4}-\d{2}-\d{2}\s{1,6}\d{1,2}:\d{2}:\d{2}\s{1,6}苹果\(1234567\)(\s.*)*(?=\d{4}-\d{2}-\d{2}\s{1,6}\d{1,2}:\d{2}:\d{2}))
运行结果是除了最后两行其他的都匹配了。
想要的是结果是把所有苹果说的话弄出来。
方法是匹配苹果的发言时间与下一个发言时间之间的内容,但是方法是错的。
可以在这个网站测试
https://regex101.com/
2504 次点击
所在节点    Python
24 条回复
frostming
2018-07-20 22:19:47 +08:00
把(\s.*)*换成:' *\n([\s\S]*?)'
jin6220
2018-07-20 23:19:19 +08:00
@frostming 嗯 为什么写成这样不行呢 (\s\S.*)*?
zhzer
2018-07-22 21:48:03 +08:00
这种情况,就分步骤正则嘛
简单的逻辑加上正则,比精心编排的正则省时省力
frostming
2018-07-22 22:22:54 +08:00
@jin6220 (\s\S.*)*?的意思是匹配:([一个空格][一个非空格][任意长度字符])重复任意次,中括号之间是顺序匹配关系。这就只能匹配 " xxxx yyyy zzzz dddd..."这种字符串了呀

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

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

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

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

© 2021 V2EX