p = re.compile('Dhcp Server .*? add scope .*? (.*?) ')
test_str = 'Dhcp Server \\server1 add scope 10.0.1.0 255.255.255.0 "area1"'
subst = "255.255.254.0"
re.sub(p, subst, test_str)
输出为255.255.254.0
。我想要得到的是:
Dhcp Server \\server1 add scope 10.0.1.0 255.255.254.0 "area1"'
我不能简单地使用字符串替换,因为server1
和10.0.1.0
将是动态的。
使用Python 3.5时如何获得理想的结果?我看了其他SO问题,但没有找到一个像我的问题。
答案 0 :(得分:1)
您可以使用捕获群组:
test_str = 'Dhcp Server \\server1 add scope 10.0.1.0 255.255.255.0 "area1"'
print re.sub(r'(Dhcp Server .*? add scope [\d.]+) [\d.]+ (.*)', r"\1 255.255.254.0 \2", test_str)
我们正在将替换位置之前的文本捕获到\1
,并在\2
中提供替换后的部分。
<强>输出:强>
Dhcp Server \\server1 add scope 10.0.1.0 255.255.254.0 "area1"
答案 1 :(得分:1)
你倒退了。您可以将捕获组用于要复制的表达式部分,而不是要替换的部分。然后在替换字符串中使用反向引用来复制它们。
p = re.compile('(Dhcp Server .*? add scope .*? ).*? ')
test_str = 'Dhcp Server \\server1 add scope 10.0.1.0 255.255.255.0 "area1"'
subst = r"\g<1>255.255.254.0 "
re.sub(p, subst, test_str)
答案 2 :(得分:1)
或者你可以匹配你想要的部分,然后重建线(特别是如果你想知道你是否已经取代):
p = re.compile('(Dhcp Server .*? add scope .*? )(.*?)( .*)')
test_str = 'Dhcp Server \\server1 add scope 10.0.1.0 255.255.255.0 "area1"'
subst = "255.255.254.0"
match = p.match(test_str)
if match:
replaced = match.group(1) + subst + match.group(3)