【问题标题】:Replace multiple characters in a string with one from a generator用生成器中的一个替换字符串中的多个字符
【发布时间】:2015-08-20 06:58:07
【问题描述】:

我正在寻找一种方法来获取如下所示的字符串:

(a,1),(b,1),(a,1),(b,5),(a,1),(b,2),(a,1),(b,1),(a,2),(b,6),(a,2)

并将第一个“a”替换为偶数,第二个替换为下一个 向上偶数,依此类推,无论字符串有多长。然后我想取第一个“b”并为其分配一个奇数,然后下一个“b”得到 下一个最高的奇数,以此类推,无论字符串有多长。我是 主要在 Python 2.7 中工作,但如果存在解决方案,愿意研究其他语言。

【问题讨论】:

  • 那么问题出在哪里?您可以解析字符串,保留 a 和 b 的计数,并且对于每个 p^th a,将其分配给 2*p,对于每个 q^th b,将其分配给 (2*q-1)
  • 下一次,请向我们展示一些您迄今为止尝试过的代码。
  • 你真的不需要任何背景。我想采用上述格式的字符串,然后使用 python 代码简单地修改它。马丁做得很好。

标签: python algorithm replace character generator


【解决方案1】:

以下正则表达式替换应该有效:

import re

def odd_even(x):
    global a,b
    if x.group(1) == 'a':
        a += 2
        return str(a)
    else:
        b += 2
        return str(b)

a = 0
b = -1
source = "(a,1),(b,1),(a,1),(b,5),(a,1),(b,2),(a,1),(b,1),(a,2),(b,6),(a,2)"

print re.sub("([ab])", odd_even, source)

打印出来:

(2,1),(1,1),(4,1),(3,5),(6,1),(5,2),(8,1),(7,1),(10,2),(9,6),(12,2)

【讨论】:

  • 非常感谢,抱歉没有发布更多背景数据,我昨晚很晚才这样做。如果我们切换组号,它会以另一种方式工作吗? if x.group(1) == 'b': b += 2 return str(b) else: a += 2 return str(a)
  • 我收到错误名称“未定义”是代码错误,或者可能是由于我使用的是 Visual Studio (2015)
  • 算了,我修好了
  • 对不起,我遗漏了导入
【解决方案2】:
even = 2
while "a" in string:
    string = string.replace("a", str(even), 1)
    even += 2

odd = 1
while "b" in string:
    string = string.replace("b", str(odd), 1)
    odd += 2

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2021-06-15
    • 1970-01-01
    • 2011-10-15
    • 2020-11-27
    • 1970-01-01
    • 2021-10-27
    • 1970-01-01
    相关资源
    最近更新 更多