可以输入"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)
可以捕获它们中的每一个。
感谢任何帮助
答案 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])