【问题标题】:Decompressing string解压字符串
【发布时间】:2020-04-12 16:24:47
【问题描述】:

我收到a3b4x2形式的字符串,需要解压得到aaabbbbxx。如果数字是固定的,比如这个例子,很容易解压。但是,输入可以是a1192x12的形式,需要解压得到aaaaaaaaaaa99xxxxxxxxxxxx31142的形式得到3333333333344。最有效的方法是什么?

【问题讨论】:

  • 这是不可能的,因为它是模棱两可的。你如何区分 11 次“a”+2 次“9”和 1192 次“a”?
  • 这是我的挑战。
  • 甚至是 1 个“a”后跟 92 个“1”。您想要任何解决方案或全部或您想如何消除歧义?
  • 也许“计数”有一些限制,例如最多两位数 (99)。
  • @IonutTicus 这本可以拯救我的一天。但我没有从数据中看到这样的模式。

标签: python python-2.7 decoding run-length-encoding


【解决方案1】:

如果你考虑一个字母出现在一位数或两位数(不是更多)中的次数, 您可以使用以下正则表达式来查找字母 + 数字形式的对: r"(\w)(\d{1,2})".

这是一个可能的解决方案:

import re

samples = ["a3b4x2", "a1192x12", "31142"]

for sample in samples:
    result = ""
    for couple in re.findall(r"(\w)(\d{1,2})", sample):
        letter, number = couple
        number = int(number)
        result += letter * number
    print(result)

你得到:

aaabbbbxx
aaaaaaaaaaa99xxxxxxxxxxxx
3333333333344

【讨论】:

  • 谢谢。这解决了一大块字符串,但不是全部。不过我会接受你的解决方案。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2019-12-22
  • 1970-01-01
  • 2011-11-12
  • 2017-10-09
  • 1970-01-01
相关资源
最近更新 更多