Python - 生成不区分大小写的REGEXP,如string

时间:2011-05-10 18:29:35

标签: python regex for-loop

如何为可能包含以下变体的字符串自动生成不区分大小写的REGEXP: 'ENTI','Enti'

到目前为止我得到了这个,但看起来很笨,

entity_type = 'Enti'
prefix = 'E'
for char in entity_type[1:]:                          
    logs_prefix += '[' + char.upper() + char.lower() + ']'
print logs_prefix

>>>'E[Nn][Tt][Yy]'

我的目标是最初发现活动日志列表(旋转的日志将以时间戳结束),该日志以给定的不区分大小写的序列开头,所以我可以

regexp_filters = logs_prefix + '_A.out'
command = "ssh %(user)s@%(ip)s 'cd %(source_path)s; ls -t %(regexp_filters)s'" % locals()

并为一系列主机生成不同的rsync表达式。 忽略排除,它由几个--excludes witholder组成,崩溃'* _A.out'日志

sync = "rsync -e ssh -a %(remote_rsync_binary)s --compress=9 -pgtov %(excluded_expression)s %(filters_expression)s --exclude='*' %s(user)@%(ip)s:%(source_path)s%(file_filter)s %(target_path)s" % locals()

小问题,如何轻松地将字符串/ char与其他字符包围在一起, 在这种情况下: 的 [炭]

编辑: 找到一个更清洁的解决方案,有更好的方法吗?

for char in entity_type[1:]:
    prefix += "[%s]" % "%s%s" % (char.upper(), char.lower() ) 

EDIT2 :(改进) 正如@eyquem所写,

prefix + ''.join( "[%s%s]" % (char.upper(), char.lower() for char in entity_type[1:])

3 个答案:

答案 0 :(得分:4)

试试这个:

reEnti = re.compile('ent[iy]',re.IGNORECASE)

答案 1 :(得分:1)

你可以试试这个(Python 2.7.1):

>>> def goofy_regexp(s):
      return '{}|{}'.format(s.upper(), s.title())

>>> goofy_regexp('enti')
'ENTI|Enti'

这是一个带旧样式字符串格式的2.6版本:

>>> def goofy_regexp26(s):
    return '%s|%s' % (s.upper(), s.title())

>>> goofy_regexp26('enti')
'ENTI|Enti'

答案 2 :(得分:0)

我无法相信python实际上并不支持正则表达式中的ignorecase。只是将“Ignorecase”作为标志传递给正则表达式解析器并不比在事后执行upper()更好,并且对于定义不区分大小写的正则表达式是无用的