As far as I could find, the python regular expression engine does not support partial ignore-case. Here is a solution using a case-insensitive regular expression, which then tests if the token is uppercase afterward.
#! /usr/bin/env python
import re
token_re = re.compile(r'uses+([a-z0-9]+)s+code', re.IGNORECASE)
def find_token(s):
m = token_re.search(s)
if m is not None:
token = m.group(1)
if token.isupper():
return token
if __name__ == '__main__':
for s in ['Use HELLO1 code',
'USE hello1 CODE',
'this does not match',
]:
print s, '->',
print find_token(s)
Here is the program's output:
Use HELLO1 code -> HELLO1
USE hello1 CODE -> None
this does not match -> None
与恶龙缠斗过久,自身亦成为恶龙;凝视深渊过久,深渊将回以凝视…