zhenying1
unique_name
采纳率66.7%
2018-10-19 08:55

python 正则如何多次匹配?

已采纳

例如abc1abc2abc3abc
re.findall('abc\w*?abc','abc1abc2abc3abc',re.I)

            结果为['abc1abc', 'abc3abc']
            怎么把abc2abc也提取出来?
  • 点赞
  • 写回答
  • 关注问题
  • 收藏
  • 复制链接分享
  • 邀请回答

5条回答

  • caozhy 从今以后生命中的每一秒都属于我爱的人 3年前

    我google了下

    stackoverflow上有人问过这个问题

    https://stackoverflow.com/questions/5616822/python-regex-find-all-overlapping-matches
    https://stackoverflow.com/questions/41045008/return-all-overlapping-patterns-using-re-findall-in-python

    网站可能需要科学下才能上,我复制了关键的一段

     import re 
    s = "123456789123456789"
    matches = re.finditer(r'(?=(\d{10}))',s)
    results = [int(match.group(1)) for match in matches]
    # results: 
    # [1234567891,
    #  2345678912,
    #  3456789123,
    #  4567891234,
    #  5678912345,
    #  6789123456,
    #  7891234567,
    #  8912345678,
    #  9123456789]
    
    点赞 评论 复制链接分享
  • xingjianfengaa xingjianfengaa 3年前

    gro=re.findall('(?=(abc\w*?abc))','abc1abc2abc3abc',re.I) 如果你只匹配数字的话请把\w换成\d

    点赞 1 评论 复制链接分享
  • Moluth Moluth 3年前
     import re
    
    def search_all(pattern,string, flags=0):
        res=[]
        while len(string)>0:
            sobj=re.search(pattern, string, flags)
            if not sobj:
                break
            span=sobj.span()
            res.append(string[span[0]:span[1]])
            string=string[span[0]+1:]
        return res
    
    print(search_all('abc\w*?abc','abc1abc2abc3abc',re.I))
    #输出['abc1abc', 'abc2abc', 'abc3abc']
    
    点赞 评论 复制链接分享
  • dare_kz dare_kz 3年前

    re.findall('(abc.abc)','abc1abc2abc3abc',re.I)

    点赞 评论 复制链接分享
  • qq_29594393 当作看不见 3年前

    不太懂python 正则表达式,但是在JavaScript中这个是无法使用正则实现的.
    so 考虑一下自己实现一个字符串方法实现吧

    点赞 评论 复制链接分享

相关推荐