如果我有一个像“MZA11LTE12DEP108N”这样的字符串,它是字母组和数字组的串联,我如何用分隔符空格字符分隔它们?在蟒蛇
问问题
1391 次
5 回答
10
假设我理解你,itertools.groupby
可以工作:
>>> import itertools
>>> s = "MZA11LTE12DEP108N"
>>> [''.join(g) for k, g in itertools.groupby(s, str.isalpha)]
['MZA', '11', 'LTE', '12', 'DEP', '108', 'N']
>>> ' '.join(''.join(g) for k, g in itertools.groupby(s, str.isalpha))
'MZA 11 LTE 12 DEP 108 N'
于 2013-02-05T20:39:03.633 回答
3
或正则表达式解决方案:
>>> import re
>>> s = "MZA11LTE12DEP108N"
>>> re.sub('(?<=\d)(?!\d)|(?<!\d)(?=\d)', ' ', s)
'MZA 11 LTE 12 DEP 108 N'
更详细地说:
re.compile("""
(?<=\d) # an empty string preceded by a digit
(?!\d) # followed by a non-digit
| # or
(?<!\d) # an empty string preceded by a non-digit
(?=\d) # followed by a digit
""", re.VERBOSE).sub(' ', s)
于 2013-02-05T20:41:38.640 回答
1
好吧,这是解决方案,但它太复杂了:D,我将其发布为开箱即用 LOL 的另一种解决方案
counter=0
txt='MZA11LTE12DEP108N'
string= ' '
while counter<len(txt):
figure=str(txt[counter])
if figure.isdigit():
if string[-1].isdigit():
string +=figure
else:
string += " "+figure
else:
if figure.isalpha():
if string[-1].isalpha():string+=figure
else:string += " "+figure
counter+=1
string = string.strip()
于 2013-02-05T21:10:39.283 回答
0
如果您的意思是要分隔变量中的字符和另一个变量中的数字,则将它们之间的空格粘贴在一起,然后:
variable = "MZA11LTE12DEP108N"
varlist = list(variable)
num = len(varlist)
strings = ''
digits = ''
for i in range(num):
if varlist[i].isalpha():
strings += varlist[i]
elif varlist[i].isdigit():
digits += varlist[i]
variable = strings+' '+digits
不确定这是否是最好的方法。
于 2013-02-05T20:49:56.023 回答
0
出于某种原因,我认为这样做的目的是删除非数字的叹息,因此我之前的答案不正确。
In [473]: re.findall(r'(\D+|\d+)',"MZA11LTE12DEP108N")
Out[473]: ['MZA', '11', 'LTE', '12', 'DEP', '108', 'N']
于 2013-02-05T21:03:54.853 回答