python re.sub,只替换部分匹配

bru*_*l29 10 python regex python-2.7

我是python的新手

我需要通过一个正则表达式匹配所有情况并进行替换.这是一个示例子字符串 - >所需的结果:

<cross_sell id="123" sell_type="456"> --> <cross_sell>
Run Code Online (Sandbox Code Playgroud)

我想在我的代码中这样做:

myString = re.sub(r'\<[A-Za-z0-9_]+(\s[A-Za-z0-9_="\s]+)', "", myString)
Run Code Online (Sandbox Code Playgroud)

而不是替换之后的所有东西<cross_sell,它取代了所有东西,只是返回'>'

有没有办法让re.sub只替换捕获组而不是整个模式?

mgi*_*son 11

您可以使用替换组:

>>> my_string = '<cross_sell id="123" sell_type="456"> --> <cross_sell>'
>>> re.sub(r'(\<[A-Za-z0-9_]+)(\s[A-Za-z0-9_="\s]+)', r"\1", my_string)
'<cross_sell> --> <cross_sell>'
Run Code Online (Sandbox Code Playgroud)

请注意,我将第一组(您要保留的组)放在括号中,然后通过"\1"在替换字符串中使用修饰符(第一组)将其保留在输出中.

  • 漂亮的答案! (2认同)