替换多个单词 - python

时间:2014-05-14 19:15:05

标签: python

可以输入"some word"

我想在包含此输入的其他一些文本中用"<strong>some</strong> <strong>word</strong>"替换此输入

我正在尝试使用此代码:

input = "some word".split()
pattern = re.compile('(%s)' % input, re.IGNORECASE)
result = pattern.sub(r'<strong>\1</strong>',text)

但它失败了,我知道原因:我想知道如何将列表input的所有元素传递给compile(),以便(%s)可以捕获它们中的每一个。

感谢任何帮助

4 个答案:

答案 0 :(得分:2)

正确的方法,因为您已经拆分列表,是直接包围列表中的每个项目(根本不使用正则表达式):

sterm = "some word".split()
result = " ".join("<strong>%s</strong>" % w for w in sterm)

如果您想知道,您正在寻找的模式是:

pattern = re.compile('(%s)' % '|'.join(sterm), re.IGNORECASE)

这适用于您的字符串,因为正则表达式将变为

(some|word)

表示&#34;匹配some或匹配word&#34;。

然而,这不是一个好方法,因为它不适用于所有字符串。例如,考虑一个单词包含另一个单词的情况,例如

a banana and an apple

变为:

<strong>a</strong> <strong>banana</strong> <strong>a</strong>nd <strong>a</strong>n <strong>a</strong>pple

答案 1 :(得分:1)

看起来你想要搜索多个单词 - 这个单词。这意味着您需要将搜索分开|,如下面的脚本:

import re

text = "some word many other words"
input = '|'.join('some word'.split())
pattern = re.compile('(%s)' % input, flags=0)
print pattern.sub(r'<strong>\1</strong>',text)

答案 2 :(得分:1)

我不完全确定我是否知道你在问什么,但是如果你想在编译函数调用中传递输入的所有元素作为参数,你可以使用* input而不是input。 *会将列表拆分为其元素。作为替代方案,您不能尝试使用加入列表并在开头添加吗?

答案 3 :(得分:1)

或者,您可以使用带有列表推导的连接运算符来创建预期结果。

text = "some word many other words".split()
result = ' '.join(['<strong>'+i+'</strong>' for i in text])