正则表达式求助

2013-05-28 18:26:17 +08:00
 Bviews
有那么一个字符串
15121:名字 [52-28]1,20-16,有一个字符串240110:字符串-------------45445:名字 [22-23]1,16-522,字符串3_34454545:字符串


我想取出其中的
(15121, 名字)以及 (45445,名字)

相应的正则应该是怎么样呢?

我尝试了几种方式

re.findall(r'(\d+):(\D+)\[', string)

这种虽然能够基本上满足,但是还是没法把名字后面的一长串空格给去除掉,关键是后面一段应该怎么改呢?
3706 次点击
所在节点    Python
12 条回复
Bviews
2013-05-28 18:27:02 +08:00
..系统吃掉了我的空格,备注: 名字后面有好几个空格。
zhangxiao
2013-05-28 18:40:54 +08:00
([\D^ ]+)
不太用python,不知道对不对
Bviews
2013-05-28 19:10:26 +08:00
@zhangxiao 不行..后面的空格还是没法去掉。。
qdcanyun
2013-05-28 19:11:40 +08:00
用bpaste或者gist贴出来
codepiano
2013-05-28 19:17:47 +08:00
@Bviews (\d+:[\D]+)(?= +\[) 用环视写了一个,不知道python里的语法会不会变
funagi
2013-05-28 19:21:29 +08:00
>>> s = ur'15121:名字 [52-28]1,20-16,有一个字符串240110:字符串-------------45445:名字 [22-23]1,16-522,字符串3_34454545:字符串'
>>> re.findall(ur'(\d+):(\S{,4})\s+\[', s)
[(u'15121', u'\u540d\u5b57'), (u'45445', u'\u540d\u5b57')]


如果名字(人名?)长度可以限制的话……暂时只想到这个
codepiano
2013-05-28 19:21:31 +08:00
@Bviews (\d+):(\D+)(?= +\[) 这个是按你的分组方式整理过的,用顺序肯定环视,可以不匹配空格和[符号
Bviews
2013-05-28 19:25:26 +08:00
@funagi
@codepiano
@qdcanyun
@zhangxiao

已经解决,谢谢各位。
re.findall(r'(\d+):(\D+?) ', string)就搞定了。
用非贪婪模式就好了。
banxi1988
2013-05-28 19:30:01 +08:00
@Bviews not work.
banxi1988
2013-05-28 19:35:10 +08:00
@Bviews \s better than use for space,try this:
r'\d+:\D+?\s{2,}?'
sunshaozong
2013-05-28 20:07:40 +08:00
javascript 版本的: /(\d+:\D+?)\s*\[/.

lz 自己写的版本, 确实可以吗? (我在javascript下测试不可以, python 下可以?)
sunshaozong
2013-05-28 20:31:26 +08:00
....

没仔细看, 你的正则后面有一个空格. 可以正确匹配. 哈哈

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

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

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

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

© 2021 V2EX