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

2 投票
2 回答
838 浏览
提问于 2025-04-16 15:30
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

.sub() 传递一个函数,这个函数会返回合适的替换内容,或者查看第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)

撰写回答