Строка Python разделяет десятичные дроби от конца строки - PullRequest
0 голосов
/ 18 апреля 2011

Я использую nlst на ftp-сервере, который возвращает каталоги в виде списков.Формат возвращаемого списка следующий:

[xyz123, abcde345, pqrst678].

Я должен разделить каждый элемент списка на две части, так что part1 = xyz и part2 = 123, т.е. разбить строку в начале целочисленной части.Любая помощь в этом будет оценена!

Ответы [ 7 ]

2 голосов
/ 18 апреля 2011

Например, используя модуль re:

>>> import re
>>> a = ['xyz123','ABCDE345','pqRst678']
>>> regex = '(\D+)(\d+)'
>>> for item in a:
...    m = re.match(regex, item)
...    (a, b) = m.groups()
...    print a, b

xyz 123
ABCDE 345
pqRst 678
2 голосов
/ 18 апреля 2011
>>> re.findall(r'\d+|[a-z]+', 'xyz123')
['xyz', '123']
0 голосов
/ 18 апреля 2011

Я не думаю, что это трудно без re

>>> s="xyz123"
>>> for n,i in enumerate(s):
...   if i.isdigit(): x=n ; break
...
>>> [ s[:x], s[x:] ]
['xyz', '123']

>>> s="abcde345"
>>> for n,i in enumerate(s):
...   if i.isdigit(): x=n ; break
...
>>> [ s[:x], s[x:] ]
['abcde', '345']
0 голосов
/ 18 апреля 2011
>>> import re
>>> [re.findall(r'(.*?)(\d+$)',x)[0] for x in ['xyz123','ABCDE345','pqRst678']]
[('xyz', '123'), ('ABCDE', '345'), ('pqRst', '678')]
0 голосов
/ 18 апреля 2011

Другой не- re ответ:

>>> [''.join(x[1]) for x in itertools.groupby('xyz123', lambda x: x.isalpha())]
['xyz', '123']
0 голосов
/ 18 апреля 2011

Используйте модуль регулярных выражений re :

import re
def splitEntry(entry):
    firstDecMatch = re.match(r"\d+$", entry)
    alpha, numeric = "",""
    if firstDecMatch:
        pos = firstDecMatch.start(0)
        alpha, numeric = entry[:pos], entry[pos:]
    else # no decimals found at end of string
        alpha = entry
    return (alpha, numeric)

Обратите внимание, что регулярным выражением является `\ d + $ ', которое должно совпадать со всеми десятичными знаками в конце строки.Если строка содержит десятичные дроби в первой части, они не будут учитываться, например: xy3zzz134 -> "xy3zzz", "134".Я выбрал это, потому что вы говорите, что ожидаете имена файлов, а имена файлов могут включать числа.Конечно, проблема в том, что имя файла заканчивается цифрами.

0 голосов
/ 18 апреля 2011

Если вы не хотите использовать регулярные выражения, то вы можете сделать что-то вроде этого.Обратите внимание, что я не проверял это, поэтому где-то может быть ошибка или опечатка.

list = ["xyz123", "abcde345", "pqrst678"]
newlist = []
for item in list:
    for char in range(0, len(item)):
        if item[char].isnumeric():
            newlist.append([item[:char], item[char:]])
            break
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...