如何在字符串中的第一个数字前插入一个字符?

时间:2017-07-15 16:41:54

标签: python regex string substitution

我有一个Python 3程序,它接受!down3!up48等命令。我希望在数字和命令的其余部分之间插入一个字符(字母x)(例如!upx48!downx3)。字母x只能插入该位置。

命令只会“向上”“向下”“向左”或“向右”,数字最多为2位数(和整数)。

这样做最简单的方法是什么?

5 个答案:

答案 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