re.sub组值

时间:2016-04-12 19:52:03

标签: python regex

如何使用re.sub来分组?

我希望它用其他值覆盖3

  

当前:XYZ.Value = 3;

     

之后:XYZ.Value = 5;

现在我的潜点看起来像这样:

name = XYZ
value = 5
content = XYZ.Value = 5

re.sub(r'(%s\.Value\s*=\s*)([^;]+)' %name, r'\1 ' + value, content)

这不起作用,因为它在覆盖值后不断添加额外的空格' '

  

XYZ.Value = 5; < --- 2个空格而不是1个

我也尝试过使用分组\g<2>

re.sub(r'(%s\.Value\s*=\s*)([^;]+)' %name, r'\1\g<2>' + value, content)

然后它继续添加现有值而不覆盖它:

  

输出:XYZ.Value = 3

2 个答案:

答案 0 :(得分:1)

re.sub(r'(%s\.Value\s*=\s*)([^;]+)' %name, r'\g<1>' + value, content)似乎会:

  • 删除反向引用后的空格,因为您已将3之前的所有空格捕获到组1中,并且
  • 使用明确的反向引用(\g<n>),允许使用后面的任何数字。

请参阅Python demo

import re
name = 'XYZ'
value = '5'
content = 'XYZ.Value = 5'
print(re.sub(r'(%s\.Value\s*=\s*)([^;]+)' %name, r'\g<1>' + value, content))
# => XYZ.Value = 5

答案 1 :(得分:0)

在您的示例中,您可以使用值“5”替换数字:

>>> import re
>>> name = 'XYZ'
>>> value = 5
>>> content = 'XYZ.Value = 5'
>>> re.sub('\d+', str(value), content)
'XYZ.Value = 5'