我在ftp服务器上使用nlst,它以列表的形式返回目录。返回列表的格式如下:
[XYZ123,abcde345,pqrst678]。
我必须将列表的每个元素分成两部分,即part1 = xyz和part2 = 123,即在整数部分的开头拆分字符串。任何有关这方面的帮助将不胜感激!
答案 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']