Pythonic插入字符的方式

时间:2012-05-19 23:43:40

标签: python string

我有两个转换案例:

s = "foo bar" #-> "foo bar &"
s = "foo ! bar" # -> "foo & ! bar" -> notice not '&!'

我是这样做的:

t = s.split("!", 1)
t[0] = t[0] + "  &"
" !".join(t)

有什么比这更好的方式呢?

5 个答案:

答案 0 :(得分:4)

不确定这是否更加pythonic,但上面的例子可以作为一个单行。

>>> s = "foo ! bar"
>>> s = s.replace(' ! ', ' & ! ') if '!' in s else s + ' &'
>>> s
'foo & ! bar'

答案 1 :(得分:4)

str.partition是为了运算符解析而构建的:

p = s.partition(' !')
print p[0]+' &'+p[1]+p[2]

从左到右解析时,它适用于前缀和中缀运算符。它总是返回一个3元组的事实允许使用它,即使找不到你的操作符并对你的结果应用一个动作,如上所示。

答案 2 :(得分:2)

>>> import re
>>> re.sub(r'( !|$)', r' &\1', 'foo bar', 1)
'foo bar &'
>>> re.sub(r'( !|$)', r' &\1', 'foo ! bar', 1)
'foo & ! bar'

答案 3 :(得分:1)

在一行中执行多个句子:

>>> s = ["foo bar", "foo ! bar"]
>>> [x + ' &' if not '!' in x else x.replace('!','& !', 1) for x in s]
['foo bar &', 'foo & ! bar']

答案 4 :(得分:1)

s1 = "foo bar"
s2 = "foo ! bar"

import re

print re.sub(r'^([^!]+)( |$)', r'\1 &\2', s1) # foo bar &
print re.sub(r'^([^!]+)( |$)', r'\1 &\2', s2) # foo & ! bar