我是Python的新手,我很难为你们所有人带来一个简单的问题,也许你可以帮助我
基本上我需要一个读取连续字符串的函数,并将其分解为:前5个字符,插入逗号,后6个字符,插入逗号,后6个字符,插入逗号,插入新行,然后重复
问题: 我的字符串是:
"CARMD000000000003FEFFE000004000004BCCXT000009000025BBT01000035000025"
我需要按照以下规则将此字符串划分为逗号:5-6-6 \n
预期结果:
CARMD,000000,000003,
FEFFE,000004,000004,
BCCXT,000009,000025,
BBT01,000035,000025,
感谢您的帮助。
答案 0 :(得分:1)
import re
text = "CARMD000000000003FEFFE000004000004BCCXT000009000025BBT01000035000025"
match = re.findall(r'([A-Z]{5})(\d{6})(\d{6})', text)
lines = [','.join(item) for item in match]
print(*lines, sep='\n')
出:
CARMD,000000,000003
FEFFE,000004,000004
BCCXT,000009,000025
使用正则表达式匹配文本,将返回元组列表:
[('CARMD', '000000', '000003'), ('FEFFE', '000004', '000004'), ('BCCXT', '000009', '000025')]
使用list comprehension构造列表,list中的每个元素都是字符串,由元组使用','
连接。
行:
['CARMD,000000,000003', 'FEFFE,000004,000004', 'BCCXT,000009,000025']
答案 1 :(得分:1)
使用re.findall()
和str.join()
函数的“单行”解决方案:
s = "CARMD000000000003FEFFE000004000004BCCXT000009000025BBT01000035000025"
chunks = ',\n'.join(','.join(t) for t in re.findall(r'(\w{5})(\w{6})(\w{6})', s))
print(chunks)
输出:
CARMD,000000,000003,
FEFFE,000004,000004,
BCCXT,000009,000025,
BBT01,000035,000025
答案 2 :(得分:1)
使用regex
的替代方法是使用列表切片和for循环,如下所示:
>>> s = 'CARMD000000000003FEFFE000004000004BCCXT000009000025BBT01000035000025'
>>>
>>> for i in range(len(s) / 17):
... temp = s[i*17:i*17+17]
... print '{}, {}, {},'.format(temp[:5], temp[5:11], temp[11:17])
...
CARMD, 000000, 000003,
FEFFE, 000004, 000004,
BCCXT, 000009, 000025,
BBT01, 000035, 000025,
答案 3 :(得分:0)
像这样的简单程序应该可以解决问题:
s = "CARMD000000000003FEFFE000004000004BCCXT000009000025BBT01000035000025"
new_s = ''
while s:
for x in (5, 6, 6):
new_s += s[:x]
s = s[x:]
new_s += ','
new_s += '\n'
print(new_s)
输出:
CARMD,000000,000003,
FEFFE,000004,000004,
BCCXT,000009,000025,
BBT01,000035,000025,
我发现嵌套循环效率很高。