如何使用re.IGNORECASE和.sub保留大小写?

时间:2011-04-11 17:49:37

标签: python regex

import re

def bold_partial(long_string, partial):

    replacer = re.compile(partial, re.IGNORECASE)
    new_long_string = replacer.sub('<b>' + partial + '</b>', long_string)
    print new_long_string


bold_partial('My name is Roger the Shrubber. I arrange, design, and sell shrubberies.', 'roger the shrubber')

返回:
我的名字是 roger the shrubber 。我安排,设计和销售灌木丛。

我想回复原案:

我的名字是 Roger the Shrubber 。我安排,设计和销售灌木丛。

抱歉,但我是一个总菜鸟。任何帮助将不胜感激。

2 个答案:

答案 0 :(得分:4)

def bold_partial_rep(matchobj):
    return '<b>' + matchobj.group(0) + '</b>'

def bold_partial(long_string, partial):
    replacer = re.compile(partial, re.IGNORECASE)
    new_long_string = replacer.sub(bold_partial_rep, long_string)
    print new_long_string

或者,如果您想缩短代码,可以删除新功能并使用bold_partial()中的以下行:

new_long_string = replacer.sub(lambda m: '<b>%s</b>' % m.group(0), long_string)

答案 1 :(得分:0)

将函数传递给.sub(),而不是返回相应的替换,或者查看组#0。