3

我正在尝试使用正则表达式替换一些内容。我可以使用以下方法做到这一点

EX: """ The search technique is usefull, the search technique is usefull """
old = 'the'
toreplace = "<span class='highlight' STYLE='background-color:yellow'>" +  old + "</span>"
pattern = re.compile(re.escape(old), re.I)
highlighted_txt = re.sub(pattern,toreplace,A,count)

" <span class='highlight' STYLE='background-color:yellow'>the</span> search tech
nique is usefull, <span class='highlight' STYLE='background-color:yellow'>the</s
pan> search technique is usefull "

但我想做的是用在内容中准确找到的东西替换旧词,比如第二个“The”应该替换为

<span class='highlight' STYLE='background-color:yellow'>The</span>

" <span class='highlight' STYLE='background-color:yellow'>the</span> search tech
nique is usefull, <span class='highlight' STYLE='background-color:yellow'>The</s
pan> search technique is usefull "
4

4 回答 4

1

使用时,re.sub您可以\0输入替换字符串,该替换字符串将扩展为搜索表达式的匹配项。您需要确保\0不被解释为八进制转义,因此使用原始字符串文字很方便。例如,您可以将代码的第三行更改为

toreplace = r"<span class='highlight' STYLE='background-color:yellow'>\0</span>"

你应该得到你正在寻找的行为。

由于您想使用整个匹配的字符串,因此您不需要在正则表达式中创建任何组。0 组始终定义为整个匹配的字符串。

于 2012-07-09T06:11:15.133 回答
0

将关键字放在捕获组中。

old = '(the)'

并使用捕获的文本作为替换(注意\1,它表示第一个捕获组):

toreplace = r"<span class='highlight' STYLE='background-color:yellow'>\1</span>"
于 2012-07-09T06:08:01.350 回答
0

在这种情况下,您需要使用反向引用(参见http://docs.python.org/library/re.html),例如:

old = 'the (cat|dog|horse)'

replace = '<span>the old \1</span>'

将“猫”替换为“老猫”。

在你的情况下,更换

replace = "..." + old + "..."

replace = "..." + '\1' + "..."
于 2012-07-09T06:10:21.000 回答
0

这解决了我的问题

toreplace = "<span class='highlight' STYLE='background-color:yellow'>\g<0></span>"
于 2012-07-11T05:31:02.103 回答