我需要使用数组替换字符串中的一些东西,它们看起来像这样:
array = [3, "$x" , "$y", "$hi_buddy"]
#the first number is number of things in array
string = "$xena is here $x and $y."
Run Code Online (Sandbox Code Playgroud)
我有另外一个数组有东西来替换那些东西,让我们说它叫做rep_array.
rep_array = [3, "A", "B", "C"]
Run Code Online (Sandbox Code Playgroud)
对于替换我使用这个:
for x in range (1, array[0] + 1):
string = string.replace(array[x], rep_array[x])
Run Code Online (Sandbox Code Playgroud)
但结果是:
string = "Aena is here A and B."
Run Code Online (Sandbox Code Playgroud)
但是我需要的只是孤独的$ x而不是$ x.结果应如下所示:
string = "$xena is here A and B."
Run Code Online (Sandbox Code Playgroud)
注意:
array开始的所有模式$.$,模式匹配; $xena不匹配$x,但foo$x 会匹配.$可以转义,@而不应该匹配(例如$x不匹配@$x)这不是你问题的直接答案,但正如我猜你会得到其他解决方案\b,我会建议你一个更加pythonic的解决方案:
rep_dict = {'x': 'A', 'y': 'B', 'hi_buddy': 'C'}
string = '{xena} is here {x} and {y}'
print string.format(rep_dict)
Run Code Online (Sandbox Code Playgroud)
但是在这里,它会引发一个KeyError缺失的xena in rep_dict,这可以通过回答这个问题来解决,使用defaultdict你可能更喜欢的格式化程序,具体取决于你的用例.
使用的问题$在于,制作与未定义真实边界相匹配的东西并非易事.大多数使用$变量的语言将它应用于下一个字符,使用较大字符(即shell和makefile)的边界,即${xena}.像Perl这样的语言使用语法来定义$变量的上下文,我猜他们也可以在tokenizer中使用regexp.
这就是为什么在python中,我们只使用格式化运算符来标记{}字符串中变量的边界,没有用处,$所以我们不必处理歧义($xena => ${x}ena or ${xena}?).
HTH
| 归档时间: |
|
| 查看次数: |
3125 次 |
| 最近记录: |