首页
学习
活动
专区
工具
TVP
发布
社区首页 >问答首页 >字典替换子字符串Python 2.7

字典替换子字符串Python 2.7
EN

Stack Overflow用户
提问于 2018-07-11 03:11:18
回答 4查看 42关注 0票数 -2

我想在新的文本文件中替换文本文件中的数字。我试着用函数字典来解决这个问题,但是现在python也替换了子字符串。

例如:我想将数字014189替换为1489,用此代码也可以将014896替换为1489 -我如何才能摆脱这个问题?谢谢!

代码语言:javascript
复制
replacements = {'01489':'1489', '01450':'1450'}
infile = open('test_fplan.txt', 'r')
outfile = open('test_fplan_neu.txt', 'w')


for line in infile:
    for src, target in replacements.iteritems():
        line = line.replace(src, target)
    outfile.write(line)
EN

回答 4

Stack Overflow用户

发布于 2018-07-11 03:18:09

我不知道您的输入文件看起来是什么样子,但是如果数字被空格括起来,这应该是可行的:

代码语言:javascript
复制
replacements = {' 01489 ':' 1489 ', ' 01450 ':' 1450 '}
票数 0
EN

Stack Overflow用户

发布于 2018-07-11 03:19:13

看起来您需要关心的是,它还修改了将src模式作为子字符串包含的数字。为了避免这种情况,您需要首先定义应该遵守的边界。例如,您是否希望坚持只替换由空格包围的匹配数字?或者可能只是因为没有相邻的数字(或句点或逗号)。由于您可能希望使用正则表达式来约束匹配,正如JoshuaF在另一个答案中所建议的那样,您可能需要避免使用简单的replace函数,而倾向于使用re库中的函数。

票数 0
EN

Stack Overflow用户

发布于 2018-07-11 03:20:30

将regexp与负查找一起使用:

代码语言:javascript
复制
import re

replacements = {'01489':'1489', '01450':'1450'}

def find_replacement(match_obj):
    number = match_obj.group(0)
    return replacements.get(number, number)

with open('test_fplan.txt') as infile:
    with open('test_fplan_neu.txt', 'w') as outfile:
        outfile.writelines(
             re.sub(r'(?<!\d)(\d+)(?!\d)', find_replacement, line)
             for line in infile
        )
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/51272513

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档