我见过这个问题的解决方案是其他问题,但不是Python。我想知道,如何在每x个字符后插入一个字符串?例如,每四个字符后面的正斜杠:
Before:
AsQs7d4dJh2h
After:
AsQs/7d4d/Jh2h
我在Python中知道我必须使用切片表示法。 x = AsQs7d4dJh2h x = x [0:4]
但这只给了我第一个实例,我希望能够在任何字符串上执行此操作,而不管该字符串的长度
更新新问题: 我想要做的是将字符串分成卡对(2-card texas holdem),问题是该算法没有考虑到' 10'卡片因此分成每4个不起作用,例如当遇到字符串中的10张卡时会发生这种情况:
AsQs/10dA/h10h/2h
AsQs/10dA/h9h8/h
AsQs/10dA/h9h7/h
AsQs/10dA/h9h6/h
AsQs/10dA/h9h5/h
AsQs/10dA/h9h4/h
AsQs/10dA/h9h3/h
AsQs/10dA/h9h2/h
AsQs/10dA/h8h7/h
AsQs/10dA/h8h6/h
所以我需要帮助的是如何插入正斜杠或从字符串中提取所有2张牌(在本例中为3手牌),无论它是否有1个或多个' 10'字符串中的卡片?
完整算法:
import itertools
strOutput = ""
lstMaster = ['As', 'Ks', 'Qs', 'Js', '10s', '9s', '8s', '7s', '6s', '5s', '4s', '3s', '2s',\
'Ad', 'Kd', 'Qd', 'Jd', '10d', '9d', '8d', '7d', '6d', '5d', '4d', '3d', '2d',\
'Ac', 'Kc', 'Qc', 'Jc', '10c', '9c', '8c', '7c', '6c', '5c', '4c', '3c', '2c',\
'Ah', 'Kh', 'Qh', 'Jh', '10h', '9h', '8h', '7h', '6h', '5h', '4h', '3h', '2h']
tupMasterEdited = itertools.combinations(lstMaster, 6)
lstMasterEdited = list(tupMasterEdited)
for combo in lstMasterEdited:
combo = str(combo).replace("(", "").replace(")", "").replace(" ", "").replace(",", "").replace("'", "")
combo = '/'.join([combo[i:i+4] for i in range(0, len(combo), 4)])
print(combo)
答案 0 :(得分:3)
可能不是最佳解决方案:
'/'.join([str[i:i+4] for i in range(0, len(str), 4)])
>>> str = "AsQs7d4dJh2h"
>>> '/'.join([str[i:i+4] for i in range(0, len(str), 4)])
'AsQs/7d4d/Jh2h'
>>> str = "sdfjsdhjfkbsdajka"
>>> '/'.join([str[i:i+4] for i in range(0, len(str), 4)])
'sdfj/sdhj/fkbs/dajk/a'
答案 1 :(得分:1)
如果正则表达式是一个选项:
>>> re.sub(r'(.{4})(?=.)', r'\1/', 'AsQs7d4dJh2h')
'AsQs/7d4d/Jh2h'
答案 2 :(得分:0)
这是x
个字符数的一般解决方案。 ch
参数可以是一个或多个字符,并且不需要是字符串中x
个字符的偶数倍。
from itertools import izip_longest
def insert_every(x, ch, str):
return ch.join(''.join(chars)
for chars in izip_longest(*([iter(str)]*x), fillvalue=''))
print insert_every(4, '/', 'AsQs7d4dJh2h') # AsQs/7d4d/Jh2h
print insert_every(4, '+-', 'AsQs7d4dJh2hZ') # AsQs+-7d4d+-Jh2h+-Z
答案 3 :(得分:0)
这可以通过替换来解决:
import re
re.sub(r'((?:(?=(10|.))\2){4})(?!$)', r'\1/', 'AsQs10dAh10h2h')
(?=(10|.))\2
模拟原子组(re模块中不可用的功能)并代表(?>10|.)
。这使用了前瞻的内容是原子的这一事实。
(?!$)
是一个负向前瞻,意味着后面没有字符串的结尾