我有一个包含如下记录的数据集
Tenochtitlan 1519
Tetzcoco 20
Tlacopan 21
我需要一个正则表达式,它将只返回成对存在的数字(即在上面的示例20和21中)-最终,我可以为这些数字添加前缀,并以以下结果结束:
Tenochtitlan 1519
Tetzcoco 1520
Tlacopan 1521
我尝试过这种方法,只是在匹配(匹配第一条记录中的“15”)时遇到问题,然后将匹配作为字符串输出:
list = ["Tenochtitlan 1519","Tetzcoco 20","Tlacopan 21"]
for x in list:
m = re.compile("(\d\D*?){2}")
match_val = m.search(x)
concat = "15" + str(match_val)
re.sub(str(match_val), x, concat)
for x in list:
print(x)
结果-
Tenochtitlan 1519
Tetzcoco 20
Tlacopan 21
首先,
str(match_val)
没有做你认为它在做的事情。从调试器:其次,x的值永远不会改变
sub()
只返回新字符串。在iPython演示:替换
for... in
循环中的原始值也会遇到困难第三,你对
sub()
的论点顺序不对。它是:正则表达式、替换字符串、原始字符串第四:你原来的正则表达式有点奇怪,可能与你的预期不符
\s\d\d$
或\s\d{2}$
可能更接近您的预期一种方法是使用捕获组(括号)和反引用(反斜杠和数字)一次性完成替换:
输出:
相关问题 更多 >
编程相关推荐