Python Challenge(3)

続いて第3問
写真の通り、ちょうど3つの大文字に囲まれてる小文字。

import re

def challenge003(str):
    return "".join(re.findall('[^A-Z][A-Z]{3}([a-z])[A-Z]{3}[^A-Z]', str))

if __name__ == '__main__':
    print(challenge003(open('challenge3.txt').read()))

先頭とケツが漏れるけどまぁいいか。
答えを見てハズレかと勘違いして第4問に行くのにかなり時間食ってしまった。

解説ページに漏れないバージョン発見。

def challenge003_2(str):
    return "".join(x[1] for x in re.findall('(^|[^A-Z])[A-Z]{3}([a-z])[A-Z]{3}([^A-Z]|$)', str))

def challenge003_3(str):
    return "".join(re.findall('(?:^|[^A-Z])[A-Z]{3}([a-z])[A-Z]{3}(?:[^A-Z]|$)', str))