V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
V2EX 提问指南
lapertem4
V2EX  ›  问与答

一个 Python 多位置多行的正则提取问题

  •  
  •   lapertem4 · 2014-07-21 19:06:53 +08:00 · 2864 次点击
    这是一个创建于 3779 天前的主题,其中的信息可能已经有所发展或是发生改变。
    新手刚学Python...

    有文本

    AC1DE2FB
    AC3DE4FB
    AC5DE6FB

    想截取为

    [1,2]
    [3,4]
    [5,6]

    试了好几次只能单独截取,有没有大神指点迷津哇~
    6 条回复    2015-01-26 14:58:14 +08:00
    messense
        1
    messense  
       2014-07-21 19:22:43 +08:00
    >>> s = """AC1DE2FB
    ... AC3DE4FB
    ... AC5DE6FB"""
    >>> import re
    >>> s
    'AC1DE2FB\nAC3DE4FB\nAC5DE6FB'
    >>> pattern = re.compile(r'\w+?(\d+?)\w+?(\d+?)\w*', re.S | re.M)
    >>> dir(pattern)
    ['__copy__', '__deepcopy__', 'findall', 'finditer', 'match', 'scanner', 'search', 'split', 'sub', 'subn']
    >>> pattern.findall(s)
    [('1', '2'), ('3', '4'), ('5', '6')]
    messense
        2
    messense  
       2014-07-21 19:25:07 +08:00   ❤️ 1
    以上是终端下试的,完整代码:

    import re

    pattern = re.compile(r'\w+?(\d+?)\w+?(\d+?)\w*', re.S | re.M)
    s = """AC1DE2FB
    AC3DE4FB
    AC5DE6FB"""

    result = pattern.findall(s)

    然后可以再对 result 做进一步处理。
    lapertem4
        3
    lapertem4  
    OP
       2014-07-21 19:30:30 +08:00
    @messense 谢回复,答主的思路我明白了,但(嘿嘿)事实的例子不是简单的字母和数字,此例只是为了简化而举的例子。

    用re.findall能多位置的匹配吗
    messense
        4
    messense  
       2014-07-21 19:46:02 +08:00
    @lapertem4 明白了思路根据实际情况改改正则表达式不就差不多了吗
    yiding
        5
    yiding  
       2014-07-21 19:46:48 +08:00
    @lapertem4 都说是 findall 了,就是找全部能够匹配的位置出来
    是你处理后的 变量名.findall
    lapertem4
        6
    lapertem4  
    OP
       2015-01-26 14:58:14 +08:00
    test post data
    关于   ·   帮助文档   ·   博客   ·   API   ·   FAQ   ·   实用小工具   ·   1260 人在线   最高记录 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 31ms · UTC 23:50 · PVG 07:50 · LAX 15:50 · JFK 18:50
    Developed with CodeLauncher
    ♥ Do have faith in what you're doing.