练习:从一组Zip Codes码中匹配指定Zip Code码

说明

Zip Code码是5位数字编码


需求

从下面10个Zip codes中获取以44开头的Zip Code码。

03824531449411615213441829505344272752010217443235


注意

2445644132

上面是2个Zip Code码:24456 和 44132。

所以匹配结果是 44132。

44564是错误匹配


技巧

保证Zip Code都是5的倍数


程序

def main():

    # 44开头的编码(ZIP Codes是5位数编码)

    s = '03824531449411615213441829505344272752010217443235'

    pattern = re.compile(r'(44\d{3})(?=(?:\d{5})*$)')

    m = re.findall(pattern, s)

    print(m)



    # pattern = re.compile(r'(?<=(\d{5})*)(44\d{3})') # * repetition not allowed inside lookbehind

    # m = re.findall(pattern, s)

    # print(m)





if __name__ == '__main__':

    main()


注意上面注释的第二个例子,它会引发一个错误:

re.error: look-behind requires fixed-width pattern


其实从逻辑来判断

第一种是保证右边剩余的数字是5的倍数;第二种是保证左边剩余的数字是5的倍数。

这没有问题,文档给出的解释是

* repetition not allowed inside lookbehind

*号不允许向后环视,向后环视必须是固定宽度表达式


 

展开阅读全文