2

文字グループと数字グループの連結である "MZA11LTE12DEP108N" のような文字列がある場合、区切り文字のスペース文字でそれらを分割するにはどうすればよいですか? パイソンで

4

5 に答える 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 に答える