V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
Sanko
V2EX  ›  正则表达式

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

  •  
  •   Sanko · 2017-08-07 20:37:59 +08:00 · 2163 次点击
    这是一个创建于 2700 天前的主题,其中的信息可能已经有所发展或是发生改变。
     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 求大神不吝赐教,刚入正则坑

    9 条回复    2017-08-20 15:53:08 +08:00
    shoaly
        1
    shoaly  
       2017-08-07 20:54:52 +08:00
    真要是这种有规律的东西 , 用循环加字符串切割吧
    sxm
        2
    sxm  
       2017-08-07 21:38:25 +08:00 via Android
    (a(\d+))+
    L2AKnG8GXx60bc6P
        3
    L2AKnG8GXx60bc6P  
       2017-08-07 21:41:19 +08:00 via iPhone
    you need regex
    L2AKnG8GXx60bc6P
        4
    L2AKnG8GXx60bc6P  
       2017-08-07 21:44:58 +08:00 via iPhone
    i mean
    import regex as re
    momocraft
        5
    momocraft  
       2017-08-07 21:50:12 +08:00
    ruby 中這個操作叫 scan. 你可以看看 py 有沒有類似的
    Sanko
        6
    Sanko  
    OP
       2017-08-07 21:56:53 +08:00 via Android
    @relic regex 不是 re 模块?
    Sanko
        7
    Sanko  
    OP
       2017-08-07 21:58:03 +08:00 via Android
    @sxm 这样只能捕获最后一个数字啊
    inflationaaron
        8
    inflationaaron  
       2017-08-08 06:13:15 +08:00
    没办法,与其用 regex 不如` split('a')`
    code42
        9
    code42  
       2017-08-20 15:53:08 +08:00
    re.findall(r'a(\d+)', 'a12a34a56a78')
    关于   ·   帮助文档   ·   博客   ·   API   ·   FAQ   ·   实用小工具   ·   2787 人在线   最高记录 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 22ms · UTC 12:53 · PVG 20:53 · LAX 04:53 · JFK 07:53
    Developed with CodeLauncher
    ♥ Do have faith in what you're doing.