python替换尖括号之间的内容(<>)

时间:2014-10-13 02:48:18

标签: python regex

我想替换<>

之间的内容

例如:

输入: 这是<测试>

输出: 这是< hh>

到目前为止,我有:

test = 'this is a <test>'
test = re.sub(r'\<[^>]*\>', 'hh', test)
print (test)

这将始终删除&lt;&gt;结果输出如下:这是一个hh。 但我想要的是:这是一个&lt; hh&gt;

我该如何解决?

5 个答案:

答案 0 :(得分:3)

正如他们所说,一个解决方案就是

newstr = 'hh'
test = re.sub(r'\<[^>]*\>', '<' + newstr + '>', test)

但我怀疑使用re提供更优化的解决方案。

答案 1 :(得分:1)

您可以使用以下内容:

hh = re.sub(r'(?!<)[^<]*(?=>)', 'hh', test)

demo

这使用负前瞻来匹配所需模式之前的<,以及与之后的>匹配的正向前瞻,而不捕获它们。

答案 2 :(得分:1)

当你的正则表达式组成时,你可以在你想要捕获的部分周围放置括号并在替换时调用。

下面的示例显示了此方法。需要说明的是,首先使用括号定义<>,其间是未定义大小的单词的正则表达式。对于替换,您可以在第一次捕获输入时调用,然后出现&#39; hh&#39;,然后您回想起捕获的输入字符串的第二个实例。通过使用反斜杠\后跟实例编号来调用位置。

import re

test = "<test>"
myre = r'(<)\w*(>)'
mysub = r'\1hh\2'
newstring = re.sub(myre, mysub, string)

答案 3 :(得分:1)

你可以使用积极的前瞻和后视。

>>> import re
>>> test = 'this is a <test>'
>>> test = re.sub(r'(?<=<)[^><]*(?=>)', r'hh', test)
>>> print test
this is a <hh>

您的正则表达式符合这些<>符号。所以它从最终结果中删除了。但是使用外观,你可以保持符号不匹配。环视是零宽度断言,不会消耗任何字符。

答案 4 :(得分:1)

test = 'this is a <test>'
test = re.sub(r'\<[^>]*\>', '<hh>', test)
print (test)

可以这样简单地完成。