[英]Seperating a python string by character while keeping inline tags intact
[英]Python 3 - How to split every character in a string into a list while keeping decimal numbers intact?
string1 = '1+2*3/4'
string2 = '1 +2* 3 / 4'
string3 = '1.2*2+3/4'
string1List = list(string1)
string2List = list(string2)
string3List = list(string3)
我需要将给定的任何字符串拆分为一个列表,并且我需要按字符将其分解,因为在我的代码示例中,输入的字符串(如 string2)中会有随机空格。
我用 string1 和 string2 得到了我想要的输出:
string1List = ['1', '+' , '2' , '*' , '3' , '/' , '4' ]
string2List = ['1', ' ' ,' +' , '2' , '*' , ' ' , '3' , ' ' , '/' , ' ' , '4']
但 string3 没有按我需要的方式工作:
# Actual result
string3List = ['1', '.' , '2' , '*' , '2' , '+' , '3' , '/' , '4']
# What I need as a result
string3List = ['1.2', '*' , '2' , '+' , '3' , '/' , '4']
有什么方法不利用导入继续按字符拆分字符串,同时保留浮点数?
交替使用re.findall
:
string3 = '1.2*2+3/4'
parts = re.findall(r'\d+(?:\.\d+)?|[+*/-]', string3)
print(parts)
这打印:
['1.2', '*', '2', '+', '3', '/', '4']
在其他语言中,我们可以尝试对环视进行正则表达式拆分。 但是 Python 的re.split
不支持在零宽度外观上进行拆分,因此re.findall
是一种解决方法。
通过算术运算进行一次自定义拆分:)
string = '1.2*2+3/4'
s = 0
res = []
for i in range(len(string)) :
if string[i] in '+*-/':
res.extend([string[s:i], string[i]])
s = i+1
res.append(string[s:])
print(res) # ['1.2', '*', '2', '+', '3', '/', '4']
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.