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

时间:2013-01-21 03:15:29

标签: 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:
    test_string = test_string.replace(found, '<span>%s</span>' % found)

print test_string

"My name is <span>Jon</span> not <span>jon</span>"

任何想法都会受到赞赏。

2 个答案:

答案 0 :(得分:3)

这是re.sub的用途:

>>> re.sub('(?i)(jon)', r'<span>\1</span>', s)
'My name is <span>Jon</span> not <span>jon</span>.'

(注意我使用(?i)而不是re.I(但两者之间没有区别),并捕获了组,即替换字符串的\1

另请注意:您可能希望考虑使用单词边界或类似内容,以便您实际上只替换单词“jon”,而不是“jonathan”或类似单词 - 取决于要求。

答案 1 :(得分:1)

import re
test_string = "My name is Jon not jon."
output = re.sub('([jJ]on)',r'<span>\1</span>', test_string)
print output

输出:

My name is <span>Jon</span> not <span>jon</span>.

如果您想更明智地过滤正则表达式匹配,最好在space之前和之后[Jj]on添加( [Jj]on )。因此它只匹配单词jon

output = re.sub('( [jJ]on )',r'<span>\1</span>', test_string)

OR 修改 正如@Jon Clements建议的那样,你可以使用单词边界而不是空格。