lapertem4
V2EX  ›  问与答

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

  •  
  •   lapertem4 · Jul 21, 2014 · 3496 views
    This topic created in 4313 days ago, the information mentioned may be changed or developed.
    新手刚学Python...

    有文本

    AC1DE2FB
    AC3DE4FB
    AC5DE6FB

    想截取为

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

    试了好几次只能单独截取,有没有大神指点迷津哇~
    6 replies    2015-01-26 14:58:14 +08:00
    messense
        1
    messense  
       Jul 21, 2014
    >>> 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  
       Jul 21, 2014   ❤️ 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
       Jul 21, 2014
    @messense 谢回复,答主的思路我明白了,但(嘿嘿)事实的例子不是简单的字母和数字,此例只是为了简化而举的例子。

    用re.findall能多位置的匹配吗
    messense
        4
    messense  
       Jul 21, 2014
    @lapertem4 明白了思路根据实际情况改改正则表达式不就差不多了吗
    4mrqn07k
        5
    4mrqn07k  
       Jul 21, 2014
    @lapertem4 都说是 findall 了,就是找全部能够匹配的位置出来
    是你处理后的 变量名.findall
    lapertem4
        6
    lapertem4  
    OP
       Jan 26, 2015
    test post data
    About   ·   Help   ·   Advertise   ·   Blog   ·   API   ·   FAQ   ·   Solana   ·   4509 Online   Highest 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 49ms · UTC 10:06 · PVG 18:06 · LAX 03:06 · JFK 06:06
    ♥ Do have faith in what you're doing.