m0_72755488 2025-01-01 23:09 采纳率: 0%
浏览 129
已结题

关于正则表达式中{}

a=“aa123bb123cc123”
b=re.findall(r"([a-z]+123){2}",a)
print(b)

输出结果为什么是["bb123"]而不是["aa123bb123"]

  • 写回答

43条回答 默认 最新

  • CSDN专家-sinJack 2025-01-06 09:51
    关注
    字符串 a='aa123bb123cc123' 包含以下部分:
    aa123
    bb123
    cc123
    
    匹配过程
    第一次匹配:从头开始,aa123bb123 符合 ([a-z]+123){2} 的模式。
      第一个捕获组匹配 aa123。
      第二个捕获组匹配 bb123。
    因此,整个匹配结果是 aa123bb123,但 re.findall 只返回捕获组的内容,即 ["bb123"]。
    第二次匹配:从 cc123 开始检查,发现没有足够的字符来满足 ([a-z]+123){2} 的模式(因为后面没有再跟一个 [a-z]+123)。
    

    如果想要得到["aa123bb123"] 结果,可以去掉捕获组括号,使用非捕获组 (?:...) 来避免捕获单个部分:

    import re
    a = 'aa123bb123cc123'
    b = re.findall(r"(?:[a-z]+123){2}", a)
    print(b)  # 输出: ['aa123bb123']
    
    评论

报告相同问题?

问题事件

  • 系统已结题 1月9日
  • 赞助了问题酬金15元 1月2日
  • 创建了问题 1月1日