Python—解析字母和数字未阻塞在一起的字符串
我在解析包含字母和数字的字符串并获取列表时遇到问题。例如:Python—解析字母和数字未阻塞在一起的字符串,python,parsing,Python,Parsing,我在解析包含字母和数字的字符串并获取列表时遇到问题。例如: >>> s = '105Bii2016' >>> foo(s) ['105', 'Bii', '2016'] 现在,我只能在这些数字都在一起的情况下才能做到: def foo(s): num, letter = '', '' for i in s: if i.isdigit(): num += i else:
>>> s = '105Bii2016'
>>> foo(s)
['105', 'Bii', '2016']
现在,我只能在这些数字都在一起的情况下才能做到:
def foo(s):
num, letter = '', ''
for i in s:
if i.isdigit():
num += i
else:
letter += i
return [letter, num]
当我称之为:
>>> s = '1234gdfh1234'
>>> foo(s)
['gdfh', '12341234']
itertools.groupby怎么样
>>> s = '1234gdfh1234'
>>> from itertools import groupby
>>> print [''.join(v) for k,v in groupby(s,str.isdigit)]
['1234', 'gdfh', '1234']
另一个解决方案使用正则表达式:
>>> print [x for x in re.split(r'(\d+)',s) if x]
['1234', 'gdfh', '1234']
itertools.groupby怎么样
>>> s = '1234gdfh1234'
>>> from itertools import groupby
>>> print [''.join(v) for k,v in groupby(s,str.isdigit)]
['1234', 'gdfh', '1234']
另一个解决方案使用正则表达式:
>>> print [x for x in re.split(r'(\d+)',s) if x]
['1234', 'gdfh', '1234']
你想要的结果是什么?
print re.split(“[a-zA-Z]”),s)
@JoranBeasley——我想你需要一些括号。可能更简单的方法是重新拆分(r'(\d+),s)。当然,这两种方法都假设字符串以字符或数字开头,如果你猜错了,那么在列表的开头(或结尾)会出现空字符串,这意味着你可能需要对其进行过滤…是的,你是正确的。。。我心烦意乱,没有想清楚:(你想要的结果是什么?print re.split(“[a-zA-Z]”,s)
@JoranBeasley——我想你需要一些捕捉括号。也许更简单的方法是re.split(r'(\d+),s)
。当然,这两种方法都假设字符串以字符或数字开头,如果您猜错了,列表的开头(或结尾)会出现空字符串,这意味着您可能需要对其进行过滤……是的,您是对的……我当时心烦意乱,没有清晰地思考:(