我有两个转换案例:
s = "foo bar" #-> "foo bar &"
s = "foo ! bar" # -> "foo & ! bar" -> notice not '&!'
我是这样做的:
t = s.split("!", 1)
t[0] = t[0] + " &"
" !".join(t)
什么是更蟒蛇的方式来做同样的事情?
不确定这是否更 Pythonic,但上面的示例可以作为单行来完成。
>>> s = "foo ! bar"
>>> s = s.replace(' ! ', ' & ! ') if '!' in s else s + ' &'
>>> s
'foo & ! bar'
str.partition
为运算符解析而构建:
p = s.partition(' !')
print p[0]+' &'+p[1]+p[2]
适应从左到右解析时的前缀和中缀运算符。它始终返回一个 3 元组的事实允许即使在找不到您的运算符时也可以使用它并对结果应用操作,如上所示。
>>> import re
>>> re.sub(r'( !|$)', r' &\1', 'foo bar', 1)
'foo bar &'
>>> re.sub(r'( !|$)', r' &\1', 'foo ! bar', 1)
'foo & ! bar'
在一行中做多个句子:
>>> s = ["foo bar", "foo ! bar"]
>>> [x + ' &' if not '!' in x else x.replace('!','& !', 1) for x in s]
['foo bar &', 'foo & ! bar']
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