Python字符串从字符串末尾拆分小数

时间:2011-04-18 06:48:40

标签: python string ftp split

我在ftp服务器上使用nlst,它以列表的形式返回目录。返回列表的格式如下:

[XYZ123,abcde345,pqrst678]。

我必须将列表的每个元素分成两部分,即part1 = xyz和part2 = 123,即在整数部分的开头拆分字符串。任何有关这方面的帮助将不胜感激!

7 个答案:

答案 0 :(得分:2)

>>> re.findall(r'\d+|[a-z]+', 'xyz123')
['xyz', '123']

答案 1 :(得分:2)

例如,使用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 :(得分:0)

如果你不想使用正则表达式,那么你可以做这样的事情。请注意,我没有对此进行过测试,因此某处可能存在错误或拼写错误。

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

答案 3 :(得分:0)

使用正则表达式模块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”。我选择了这个,因为你说你期待文件名,文件名可以包含数字。当然,如果文件名以数字结尾,那仍然是一个问题。

答案 4 :(得分:0)

另一个非re答案:

>>> [''.join(x[1]) for x in itertools.groupby('xyz123', lambda x: x.isalpha())]
['xyz', '123']

答案 5 :(得分:0)

>>> import re
>>> [re.findall(r'(.*?)(\d+$)',x)[0] for x in ['xyz123','ABCDE345','pqRst678']]
[('xyz', '123'), ('ABCDE', '345'), ('pqRst', '678')]

答案 6 :(得分:0)

如果没有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']