Python 如何根据数字/非数字拆分字符串(使用正则表达式?)

Python 如何根据数字/非数字拆分字符串(使用正则表达式?),python,regex,string,tokenize,Python,Regex,String,Tokenize,我想在python中将字符串拆分为一个列表,具体取决于数字/非数字。 比如说, 5 55+6+ 5/ 应该回来 ['5','55','+','6','+','5','/'] 我现在有一些代码,它循环遍历字符串中的字符,并使用re.match(“\d”)或(“\d”)对它们进行测试。我想知道是否有更好的方法 注意:必须与Python2.4兼容,假设6和5之间的+需要匹配(您缺少这一点) 如果顺序不重要,您可以进行两次拆分: re.split('\D+', mystring) re.spli

我想在python中将字符串拆分为一个列表,具体取决于数字/非数字。 比如说,

5 55+6+  5/
应该回来

['5','55','+','6','+','5','/']
我现在有一些代码,它循环遍历字符串中的字符,并使用re.match(“\d”)或(“\d”)对它们进行测试。我想知道是否有更好的方法


注意:必须与Python2.4兼容,假设6和5之间的
+
需要匹配(您缺少这一点)


如果顺序不重要,您可以进行两次拆分:

re.split('\D+', mystring)

re.split('\d+', mystring)
然而,从你的输入来看,它可能是数学的。。。在这种情况下,顺序很重要。:)

您最好使用
re.findall
,就像在其他答案中一样。

这是最简单的答案:)


使用
findall
finditer

>>> re.findall(r'\d+|[^\s\d]+', '5 55+6+ 5/')
['5', '55', '+', '6', '+', '5', '/']

很好的模式,但似乎您也可以使用findall。您也不需要在模式中使用尾随的
\s*
,但这也不会造成任何伤害+谢谢!芬德尔正是我要找的人。最后使用“[]+|\d+| ^\d”(需要多个连续数字在一起,但非数字分开)。是的,这是一个反向波兰符号计算器-顺序绝对重要!是的,差不多。这是一个反向波兰符号计算器,所以我不能仅仅假设字符之间总是有一个空格(直到现在我才知道我想做的事情有一个名字,谢谢你告诉我)。
re.findall('\d+|[^\d]+','134aaaaa')
>>> re.findall(r'\d+|[^\s\d]+', '5 55+6+ 5/')
['5', '55', '+', '6', '+', '5', '/']