尝试做一些简单的事情: 我有一个文本文件的行,我知道确切的格式。连续六个整数由空格分隔。
例如:
line = '78 170 180 1 2 3'
我想要做的是用另一个数字替换第四个数字。该替换作为变量传递(即,未知且未经过硬编码):
num_replace_str
所以,我想要一段代码,如:
newline = re.sub(r'\d+\s\d+\s\d+\s(\d+)\s\d+\s\d+\s',num_replace_str,line)
将产生如下结果:
print newline
78 170 180 50 2 3
我只想用字符串num_replace_str(在本例中为num_replace_str = '50')替换我尝试过分组()的第4个数字。
答案 0 :(得分:1)
好像你可以拆分字符串,插入新值并将' '.join
重新组合在一起。
split = line.split()
split[3] = str(50)
new_line = ' '.join(split)
示例:
>>> line = '78 170 180 1 2 3'
>>> split = line.split()
>>> split[3] = str(50)
>>> new_line = ' '.join(split)
>>> print new_line
78 170 180 50 2 3
并不是说这不会保留连续的空格运行。 。 。如果这是一个关键要求,那么正则表达式可能是更好的选择。
答案 1 :(得分:1)
您需要将捕获组用于要保留的行的部分,而不是要替换的部分。然后使用\n
将其复制到替换字符串,以复制n
组的匹配。
re.sub(r'^((?:\d+\s+){3})\d+', r'\1' + num_replace_str, line)
答案 2 :(得分:1)
您可以使用positive lookahead assertion。
>>> import re
>>> line = '78 170 180 1 2 3'
>>> num_replace_str = str(50)
>>> newline = re.sub(r'\d+(?=\s\d+\s\d+$)',num_replace_str,line)
>>> print newline
78 170 180 50 2 3
通过外部regex
模块,
>>> import regex
>>> newline = regex.sub(r'(?<=^\d+\s\d+\s\d+\s)\d+',num_replace_str,line)
>>> print newline
78 170 180 50 2 3