【问题标题】:substitue string by index without using regular expressions不使用正则表达式按索引替换字符串
【发布时间】:2017-02-16 14:18:00
【问题描述】:

这应该很容易,但我正在寻找一种有效的方法来执行它。

我知道我可以将字符串分成两部分并插入新值,但我尝试替换索引 22-26 之间的每一行,如下所示:

line.replace(line[22:26],new_value)

问题

但是,该函数会替换行中与line[22:26] 中的模式相似的所有内容。

在下面的示例中,我想将标记的数字 1 替换为数字 17

这是结果。注意在几个地方将1 替换为17

因此我不明白replace 命令的行为。对我做错了什么有简单的解释吗?

为什么我不想要 RE

索引 22-26 之间的值在形式上统一。

注意:我在 Unix/Linux 机器上使用 python 3.5。

【问题讨论】:

  • line[22:26] 给你一个带有1 和一些空格的字符串。您使用此模式将这一行中的每个出现替换为 new_value

标签: string python-3.x replace


【解决方案1】:

str.replace 将字符串中的 1 个子字符串模式替换为另一个。

例如

'ab cd ab ab'.replace('ab', 'xy')
# produces output 'xy cd xy xy'

同样,

mystr = 'ab cd ab ab'
mystr.replace(mystr[0:2], 'xy')
# also produces output 'xy cd xy xy'

你可以做什么,替换 只是位置 22-26 的字符

line = line[0:22] + new_value + line[26:]

另外,查看您的数据,在我看来,它似乎是一个固定宽度的文本文件。虽然我的建议可行,但处理这些数据的更稳健的方法是在处理数据之前先读取它并分离记录中的不同字段。

如果您可以访问pandas 库,它提供了一个有用的功能,仅用于阅读fixed-width files

【讨论】:

    猜你喜欢
    • 2017-05-13
    • 1970-01-01
    • 2015-02-27
    • 1970-01-01
    • 2013-02-19
    • 2018-07-13
    • 2015-11-30
    相关资源
    最近更新 更多