我想将一个字符串拆分为数字部分和文本/符号部分 我当前的代码不包含负数或小数,并且表现得很奇怪,在输出的末尾添加了一个空列表元素
import re
mystring = 'AD%5(6ag 0.33--9.5'
newlist = re.split('([0-9]+)', mystring)
print (newlist)
当前输出:
['AD%', '5', '(', '6', 'ag ', '0', '.', '33', '--', '9', '.', '5', '']
期望的输出:
['AD%', '5', '(', '6', 'ag ', '0.33', '-', '-9.5']
最佳答案
您的问题与以下事实有关:您的正则表达式捕获一个或多个数字并将它们添加到结果列表中,并且数字用作分隔符,考虑前后的部分。因此,如果末尾有数字,则拆分结果会将末尾的空字符串添加到结果列表中。
您可以使用正则表达式拆分,该正则表达式匹配带有可选减号的 float 或整数,然后删除空值:
result = re.split(r'(-?\d*\.?\d+)', s)
result = filter(None, result)
要将负数/正数与指数匹配,请使用
r'([+-]?\d*\.?\d+(?:[eE][-+]?\d+)?)'
-?\d*\.?\d+
正则表达式匹配:
-?
- 一个可选的减号\d*
- 0+ 位\.?
- 一个可选的文字点\d+
- 一个或多个数字。
关于Python正则表达式将字符串拆分为数字和文本/符号,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/43237338/