从列表中替换字符串中的反向单词

问题描述 投票:0回答:1

Python

我有颠倒单词的列表:

['rab', 'milb']

我有一个字符串,里面有这些词:

foo(bar)baz(blim)

我怎样才能在恢复时替换这个词?

这就是我所做的:

a = "foo(bar)baz(blim)"
reversed_w = ['rab', 'milb']
for i in range(len(reversed_w)):
    pure_k = a.replace(reversed_w[i][::-1], reversed_w[i])

print(pure_k)

# what i expect: foo(rab)baz(milb)
# what i get: foo(bar)baz(milb)
# it happens cuz after first iteration it "foo(rab)baz(blim)", but
# because i dont know how to "remmember" that state of that string,
# after second iteration i get "foo(bar)baz(milb)", 
# cuz i am making that operation with unedited 
# string: "foo(bar)baz(blim)".

当然我可以用切片来做,但它很暴力。想象一下,如果我有 50 个颠倒的单词和 1000 个字符长的字符串

我在for循环中搜索了replace,但没有找到任何东西

python string replace character slice
1个回答
0
投票

我只会使用正则表达式:

import re
pattern = re.compile("(.*?)\((.*?)\)")
all_matches = pattern.findall("foo(bar)baz(blim)")
# [('foo', 'bar'), ('baz', 'blim')]

然后你就可以逆转了:

result = ""
for func_name, arg in all_matches:
    result += func_name + "(" + "".join(reversed(arg)) + ")"
print(result)
# 'foo(rab)baz(milb)'
© www.soinside.com 2019 - 2024. All rights reserved.