我想替换<>
之间的内容例如:
输入: 这是<测试>
输出: 这是< hh>
到目前为止,我有:test = 'this is a <test>'
test = re.sub(r'\<[^>]*\>', 'hh', test)
print (test)
这将始终删除&lt;&gt;结果输出如下:这是一个hh。 但我想要的是:这是一个&lt; hh&gt;
我该如何解决?
答案 0 :(得分:3)
正如他们所说,一个解决方案就是
newstr = 'hh'
test = re.sub(r'\<[^>]*\>', '<' + newstr + '>', test)
但我怀疑使用re
提供更优化的解决方案。
答案 1 :(得分:1)
您可以使用以下内容:
hh = re.sub(r'(?!<)[^<]*(?=>)', 'hh', test)
这使用负前瞻来匹配所需模式之前的<
,以及与之后的>
匹配的正向前瞻,而不捕获它们。
答案 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)
可以这样简单地完成。