【问题标题】:How to replace the subject (fixed position) in a string如何替换字符串中的主题(固定位置)
【发布时间】:2017-09-09 05:54:15
【问题描述】:

修改目标:

Sample ="FST~C~D~170101 FST~C~D~170102 FST~C~D~170103 FST~C~D~170104"

我想用“170413”替换“170101”、“170102”、“170103”、“170104”, "170414","170415","170416"(当前日期和落后天数) 输出应该是:

"FST~C~D~170413 FST~C~D~170414 FST~C~D~0415 FST~C~D~170416"

我尝试使用replace(),但失败了。我知道这是由于不允许修改“字符串”。任何人都可以在这方面提供帮助!

【问题讨论】:

  • 您究竟是如何尝试替换这些的……?
  • 请发布您的代码

标签: python string replace


【解决方案1】:

由于那里数据的性质,您可能会受益于将数据分割成变量并将它们添加到列表或字典中。从那里您可以使用 for 循环对特定值进行操作。

这应该有助于切片:Is there a way to substring a string in Python?

>>> x = "FST~C~D~170101 FST~C~D~170102 FST~C~D~170103 FST~C~D~170104"
>>> a = x[:7]
>>> print(a)
'FST~C~D~'
>>> b = x[8:13]
>>> print(b)
170101

...继续使用其余数据

>>> mydict = {a:b,c:d,e:f,g:h}

然后使用您的值的字典,对它们进行操作。要做到这一点,这里有一个有用的答案:Replacing values in a Python list/dictionary?

我希望这会有所帮助!

【讨论】:

    【解决方案2】:

    您可以使用正则表达式查找旧日期并定义一个函数来计算新日期:

    import re
    from datetime import date, datetime
    
    sample = "FST~C~D~170101 FST~C~D~170102 FST~C~D~170103 FST~C~D~170104"
    
    def parse_yymmdd(yymmdd):
        return datetime.strptime(yymmdd, '%y%m%d').date()
    
    first_date = parse_yymmdd('170101')
    
    def replace_date(old_date):
        old_date = parse_yymmdd(old_date.group(0))
        new_date = date.today() + (old_date - first_date)
        return new_date.strftime('%y%m%d')
    
    print(re.sub(r'(?<=FST~C~D~)\d+\b', replace_date, sample))
    # "FST~C~D~170413 FST~C~D~170414 FST~C~D~170415 FST~C~D~170416"
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2021-12-28
      • 2014-08-19
      • 2011-01-15
      • 1970-01-01
      • 2017-09-17
      • 1970-01-01
      • 2015-10-18
      相关资源
      最近更新 更多