正则表达式在捕获时重复如何精简?

2017-08-07 20:37:59 +08:00
 Sanko
 import re
 s = 'a12a34a56a78 ‘
 reg1 = r'a(\d+)a(\d+)a(\d+)a(\d+)'
 reg2 = r'(?:a(\d+)){4}'    #我的错误示范

假如 reg1 重复 n 次,如何将 reg1 改成 reg2 的形式还能正常的捕获?我这样写 reg2 只能捕获 78 求大神不吝赐教,刚入正则坑

2016 次点击
所在节点    正则表达式
9 条回复
shoaly
2017-08-07 20:54:52 +08:00
真要是这种有规律的东西 , 用循环加字符串切割吧
sxm
2017-08-07 21:38:25 +08:00
(a(\d+))+
relic
2017-08-07 21:41:19 +08:00
you need regex
relic
2017-08-07 21:44:58 +08:00
i mean
import regex as re
momocraft
2017-08-07 21:50:12 +08:00
ruby 中這個操作叫 scan. 你可以看看 py 有沒有類似的
Sanko
2017-08-07 21:56:53 +08:00
@relic regex 不是 re 模块?
Sanko
2017-08-07 21:58:03 +08:00
@sxm 这样只能捕获最后一个数字啊
inflationaaron
2017-08-08 06:13:15 +08:00
没办法,与其用 regex 不如` split('a')`
code42
2017-08-20 15:53:08 +08:00
re.findall(r'a(\d+)', 'a12a34a56a78')

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

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

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

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

© 2021 V2EX