是否可以在Python中实现类似这样的简单:
#!/usr/bin/perl
my $a = 'Use HELLO1 code';
if($a =~ /(?i:use)\s+([A-Z0-9]+)\s+(?i:code)/){
print "$1\n";
}
Run Code Online (Sandbox Code Playgroud)
字符串中间的标记字母始终是大写字母.其余单词的字母可以有任何情况(使用,使用,使用,代码,代码,代码等)
Chr*_*ard 10
据我所知,python正则表达式引擎不支持部分ignore-case.这是一个使用不区分大小写的正则表达式的解决方案,然后测试令牌是否为大写.
#! /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)
Run Code Online (Sandbox Code Playgroud)
这是程序的输出:
Use HELLO1 code -> HELLO1
USE hello1 CODE -> None
this does not match -> None
Run Code Online (Sandbox Code Playgroud)
小智 6
从python 3.6开始,您可以在组内使用flag:
(?imsx-imsx:...)
(来自集合“ i”,“ m”,“ s”,“ x”的零个或多个字母,可选后跟“-”,然后是同一集合中的一个或多个字母。)这些字母设置或删除了相应的标志:re.I(忽略大小写),re.M(多行),re.S(所有点都匹配)和re.X(详细),用于表达式的一部分。
因此(?i:use),现在是正确的语法。从python3.6终端:
>>> import re
>>> regex = re.compile('(?i:use)\s+([A-Z0-9]+)\s+(?i:code)')
>>> regex.match('Use HELLO1 code')
<_sre.SRE_Match object; span=(0, 15), match='Use HELLO1 code'>
>>> regex.match('use HELLO1 Code')
<_sre.SRE_Match object; span=(0, 15), match='use HELLO1 Code'>
Run Code Online (Sandbox Code Playgroud)