Python 将字符串切片到下一个字符

Python 将字符串切片到下一个字符,python,list,Python,List,假设我有这样的字符串Y18C9A8B88,我想得到这样的东西 Y18C9A8B88.cut() >>> [Y,18],[C,9],[A,8],[B,88] 如果num的长度等于1,则我成功地做到了这一点,但如果num的长度大于1,则它不起作用您可以使用正则表达式: import re re.findall("(\w+?)(\d+)", "Y18C9A8B88") 细分: \w+?捕获下一个数字之前的所有字符串,\d+捕获下一个数字之前的所有数字?确保它不会捕获可以处理的信件

假设我有这样的字符串Y18C9A8B88,我想得到这样的东西

Y18C9A8B88.cut()
>>> [Y,18],[C,9],[A,8],[B,88]

如果num的长度等于1,则我成功地做到了这一点,但如果num的长度大于1,则它不起作用

您可以使用正则表达式:

import re
re.findall("(\w+?)(\d+)", "Y18C9A8B88")
细分:

\w+?捕获下一个数字之前的所有字符串,\d+捕获下一个数字之前的所有数字?确保它不会捕获可以处理的信件\d。 括号告诉它哪个部分属于哪个组。 re.findall确保我们尝试匹配,直到字符串耗尽。
您可以为此使用正则表达式:

import re
re.findall("(\w+?)(\d+)", "Y18C9A8B88")
细分:

\w+?捕获下一个数字之前的所有字符串,\d+捕获下一个数字之前的所有数字?确保它不会捕获可以处理的信件\d。 括号告诉它哪个部分属于哪个组。 re.findall确保我们尝试匹配,直到字符串耗尽。
假设所有字母都是大写,1个字母后面跟n个数字,那么

进口稀土 结果=关于findall'[A-Z][0-9]*',Y18C9A8B88 results=[[result[0],intresult[1:]用于result in results] 结果等于:

[Y',18],[C',9],[A',8],[B',88]]
假设所有字母都是大写,1个字母后面跟n个数字,那么

进口稀土 结果=关于findall'[A-Z][0-9]*',Y18C9A8B88 results=[[result[0],intresult[1:]用于result in results] 结果等于:

[Y',18],[C',9],[A',8],[B',88]]
仅在不想使用正则表达式的远程情况下,您可以尝试:

字符串='Y18C9A8B88' letters=[ch表示字符串中的ch,如果ch.isalpha] nums=.join[ch if ch.isdigit else''用于ch in string].strip.split 结果=[[*tuple\]用于zipletters中的tuple\\],nums] 输出:


仅在不想使用正则表达式的远程情况下,您可以尝试:

字符串='Y18C9A8B88' letters=[ch表示字符串中的ch,如果ch.isalpha] nums=.join[ch if ch.isdigit else''用于ch in string].strip.split 结果=[[*tuple\]用于zipletters中的tuple\\],nums] 输出:


但是,如果我想将它们添加到列表而不是元组中,您可以使用listmaplist,re.findall\w+?\d+,Y18C9A8B88轻松地将其转换为列表列表,这太棒了!你能解释一下map的作用吗?map在iterable的所有元素上运行相同的函数。它返回一个特殊的对象,我将其转换为list。它是python函数式编程的一部分。在这种情况下,您可以运行results=[[result[0],intresult[1]]作为result-In-results],与您的答案类似,注意这里是[1],而不是[1:]。但是,问题不清楚是否需要。但是,如果我想将它们添加到列表而不是元组中,该怎么办?您可以使用listmaplist,re.findall\w+?\d+,Y18C9A8B88轻松地将其转换为列表列表。太棒了!你能解释一下map的作用吗?map在iterable的所有元素上运行相同的函数。它返回一个特殊的对象,我将其转换为list。它是python函数式编程的一部分。在这种情况下,您可以运行results=[[result[0],intresult[1]]作为result-In-results],与您的答案类似,注意这里是[1],而不是[1:]。然而,问题并不清楚是否需要这样做。