如何在数字周围分割字符串?

时间:2015-05-19 09:22:17

标签: python regex string

例如,取输入字符串Street42/53。我想将它分成数字运行,所以我得到['Street', '42, '/', '53']。我尝试了一个正则表达式,但问题是像(?<=\d)(?!=\d)这样的表达式没有匹配的实际字符。所以我尝试用不常见的角色替换匹配并在其上拆分。

import re
delimiter = re.compile(r'(?<=\d)(?!=\d)')
re.sub('Street42/53', '\f').split('\f')

但是,这只返回两个空字符串的列表。如何在Python中拆分数字?为了澄清,只要数字位于非数字旁边,但只是数字或只是非数字的内部运行,就会发生拆分。

3 个答案:

答案 0 :(得分:9)

你可以简单地说:

re.split(r'(\d+)', your_string)
>>> test = 'street43/23hello243world'
>>> re.split(r'(\d+)', test)
['street', '43', '/', '23', 'hello', '243', 'world']

答案 1 :(得分:2)

您可以使用regex module

x = "Street42/53"
print regex.split(r"(?<=\d)(?=\D)|(?<=\D)(?=\d)", x, flags=regex.VERSION1)

python re模块不支持在0 width assertions上拆分,但regex模块支持拆分。

答案 2 :(得分:0)

由于Python的re.split并未在零长度匹配上进行拆分,因此这是一种解决方法,同时使用零长度外观:

import re

re.sub(r'(?<=\D)(?=\d)|(?<=\d)(?=\D)', '\0', 'Street42/53').split('\0');
//=> ['Street', '42', '/', '53']

RegEx Demo