查找所有匹配项并用索引迭代替换

时间:2018-08-29 21:15:11

标签: python regex replace

我有以下问题:

我想用索引标记找到的匹配项。示例:

x = "hayde hayde bim bam hayde hayde bim bam hayde hayde bim bbm ba bi bim"

我想用bim替换所有bam<1>, <2>, ..

赞:

x = "hayde hayde <1> <2> hayde hayde <3> <4> hayde hayde <3> bbm ba bi <5>"

得到的输出是一个字典:

{"bim": "<1>"}
{"bam": "<2>"}
..

我认为这是一个简单的问题,但我找不到解决此问题的方法。我必须使用re模块来找到匹配项,而不是str.replace。这是我的问题的抽象示例

1 个答案:

答案 0 :(得分:0)

我怀疑还有另一种方法可以更直接地解决您的真实问题,但是请尝试以下方法:

代码

text()

演示 +

import collections as ct


def replace(s, subs):
    """Return a tuple of substitutes and a related dict."""
    dd = ct.defaultdict(list)
    replaced = []
    for i, word in enumerate(s.split()):
        if word in set(subs):
            pos = "<{}>".format(i)
            replaced.append(pos)
            dd[word].append(pos)
        else:
            replaced.append(word)
    return " ".join(replaced), dict(dd)

输出

x = "hayde hayde bim bam bimbam hayde hayde bim bam hayde hayde bim bbm ba bi bim"
replace(x, ["bim", "bam"])

您评论了:

  

我需要知道在哪里清理字符串。

为什么不使用反映实际索引位置的数字枚举拆分字符串?因此,在此示例中,数字替换表示拆分字符串的索引位置。您可以根据需要轻松地将它们换成递增计数器。

+ 注意:测试输入与OP(“ bimbam”)略有不同。

相关问题