我有以下问题:
我想用索引标记找到的匹配项。示例:
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
。这是我的问题的抽象示例
答案 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”)略有不同。