我有一个Python 3程序,它接受!down3
或!up48
等命令。我希望在数字和命令的其余部分之间插入一个字符(字母x)(例如!upx48
或!downx3
)。字母x只能插入该位置。
命令只会“向上”“向下”“向左”或“向右”,数字最多为2位数(和整数)。
这样做最简单的方法是什么?
答案 0 :(得分:3)
您可以遍历该命令并插入'x'
:
def insert_x(command):
for i, c in enumerate(command):
if c.isdigit():
break
return command[:i] + 'x' + command[i:]
示例:
>>> insert_x('!down3')
'!downx3'
>>> insert_x('!up48')
'!upx48'
答案 1 :(得分:1)
您可以使用正则表达式:
>>> li=["!down3", "!up48"]
>>> [re.sub(r'^(\D)(up|down|left|right)(\d+)',r'\1\2x\3', s) for s in li]
['!downx3', '!upx48']
如果它只是整个字符串而且只有两位数(如你所描述的那样),你也可以选择匹配:
>>> [re.sub(r'^(\D)(up|down|left|right)(\d{1,2})$',r'\1\2x\3', s) for s in li]
答案 2 :(得分:0)
你可以试试这个:
command = "!down3"
indexes = [i for i, a in enumerate(command) if a.isdigit()]
command = list(command)
x = "somevalue"
command.insert(indexes[0], x)
print ''.join(command)
答案 3 :(得分:0)
import re
def insertX(s):
split = re.split('(\d.*)',s)
return "x".join(split[:-1])
s = "!down354"
insertX(s)
结果:
!downx354
答案 4 :(得分:0)
如果您正在使用这一次,也许答案就是答案:
cmds = {d+str(i):d+'x'+str(i) for i in range(10,100) for d in ['up','down','left','right']}
print cmds