Python 在不区分大小写的字符串查找之前和之后插入

Python 在不区分大小写的字符串查找之前和之后插入,python,regex,Python,Regex,我试图在另一个字符串中找到一个字符串,并以不区分大小写的方式在每次找到它之前和之后插入文本 我提出了以下方法,效果不错,只是感觉不太理想,所以我想知道是否有人有更有效的方法 import re test_string = "My name is Jon not jon." search = re.compile(re.escape('jon'), re.IGNORECASE) find = re.findall(search, test_string) for found in find

我试图在另一个字符串中找到一个字符串,并以不区分大小写的方式在每次找到它之前和之后插入文本

我提出了以下方法,效果不错,只是感觉不太理想,所以我想知道是否有人有更有效的方法

import re

test_string = "My name is Jon not jon."

search = re.compile(re.escape('jon'), re.IGNORECASE)

find = re.findall(search, test_string)

for found in find:
    test_string = test_string.replace(found, '<span>%s</span>' % found)

print test_string

"My name is <span>Jon</span> not <span>jon</span>"
重新导入
test_string=“我的名字是Jon而不是Jon。”
search=re.compile(re.escape('jon'),re.IGNORECASE)
find=re.findall(搜索、测试字符串)
对于在查找中找到的:
test_string=test_string.replace(找到了“%s”,找到了“%s”)
打印测试字符串
“我叫乔恩,不是乔恩”

任何想法都将不胜感激。

这就是
re.sub
的目的:

>>> re.sub('(?i)(jon)', r'<span>\1</span>', s)
'My name is <span>Jon</span> not <span>jon</span>.'
>>re.sub(“(?i)(jon)”,r'\1',s)
“我叫乔恩,不是乔恩。”
(注意,我使用了
(?I)
而不是
re.I
(但是,两者之间没有区别),并捕获了组,即替换字符串的
\1


另一个注释:您可能希望考虑使用Word边界或类似的词,这样您实际上只替换了“乔恩”这个词,而不是说“乔纳森”,或类似的-根据要求。

< P>这就是<代码> Re.Sub <代码>为:

>>> re.sub('(?i)(jon)', r'<span>\1</span>', s)
'My name is <span>Jon</span> not <span>jon</span>.'
import re
test_string = "My name is Jon not jon."
output = re.sub('([jJ]on)',r'<span>\1</span>', test_string)
print output
>>re.sub(“(?i)(jon)”,r'\1',s)
“我叫乔恩,不是乔恩。”
(注意,我使用了
(?I)
而不是
re.I
(但是,两者之间没有区别),并捕获了组,即替换字符串的
\1

另一个注释:您可能希望考虑使用Word边界或类似的词,以便您实际上只替换“乔恩”这个词,而不必说“乔纳森”,或类似的-根据要求。

import re
test_string = "My name is Jon not jon."
output = re.sub('([jJ]on)',r'<span>\1</span>', test_string)
print output
编辑: 正如@Jon Clements所建议的,您可以使用单词边界而不是空格

编辑:
正如@Jon Clements所建议的,您可以使用单词边界而不是空格。

Jon回答包含“Jon”的问题:PJon回答包含“jon”的问题:P