How to set ignorecase flag for part of regular expression in Python?

后端 未结 3 1558
臣服心动
臣服心动 2020-12-19 07:54

Is it possible to implement in Python something like this simple one:

#!/usr/bin/perl
my $a = \'Use HELLO1 code\';
if($a =~ /(?i:use)\\s+([A-Z0-9]+)\\s+(?i:c         


        
3条回答
  •  北荒
    北荒 (楼主)
    2020-12-19 08:43

    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'use\s+([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
    

提交回复
热议问题