Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/321.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
按模板拆分的Python字符串_Python_String_Loops - Fatal编程技术网

按模板拆分的Python字符串

按模板拆分的Python字符串,python,string,loops,Python,String,Loops,我是Python新手,我正在努力解决一个可能对你们所有人来说都很简单的问题,也许你们可以帮我一下 基本上,我需要一个函数来读取一个连续字符串并按如下方式将其打断:前5个字符,插入逗号,后6个字符,插入逗号,后6个字符,插入逗号,插入新行,然后重复 问题是: 我的字符串是: "CARMD000000000003FEFFE000004000004BCCXT000009000025BBT01000035000025" 我需要按照以下规则将此字符串分成逗号:5-6-6\n 预期结果: CARMD,00

我是Python新手,我正在努力解决一个可能对你们所有人来说都很简单的问题,也许你们可以帮我一下

基本上,我需要一个函数来读取一个连续字符串并按如下方式将其打断:前5个字符,插入逗号,后6个字符,插入逗号,后6个字符,插入逗号,插入新行,然后重复

问题是: 我的字符串是:

"CARMD000000000003FEFFE000004000004BCCXT000009000025BBT01000035000025"
我需要按照以下规则将此字符串分成逗号:
5-6-6\n

预期结果:

CARMD,000000,000003, 

FEFFE,000004,000004, 

BCCXT,000009,000025,

BBT01,000035,000025,
谢谢你的帮助

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']
输出:

使用正则表达式匹配文本,将返回元组列表:

[('CARMD', '000000', '000003'), ('FEFFE', '000004', '000004'), ('BCCXT', '000009', '000025')]
除了使用列表理解来构造列表外,列表中的每个元素都是字符串,由元组使用
,'
连接

线路:

['CARMD,000000,000003', 'FEFFE,000004,000004', 'BCCXT,000009,000025']
使用
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
使用
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

这样一个简单的程序应该可以做到:

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,

我发现嵌套循环非常有效。

像这样一个简单的程序应该可以做到:

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,

我发现嵌套循环非常有效。

使用
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,

使用
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,

此解决方案不会将最终字符串保存到变量中。它只是把它打印出来。如果您只想一次性使用,我想这很好。@Cheyn Shmuel我将数据存储在列表“行”中。此解决方案不会将最后一个字符串保存到变量中。它只是把它打印出来。如果您只想一次性使用,我想这很好。@Cheyn Shmuel我将数据存储在列表“行”中