我正在尝试创建可以将数学方程式划分为不同部分(数字和运算符)的字符串解析器。现在,我正在尝试创建一个列表,以区分不同部分。
例如:[“ 123”,“ +”,“ 123”]
但是,我正在尝试以一种不需要我在输入中写空格的方式进行操作。我不想输入:“ 123 + 123”,而是要输入:“ 123 + 123”。如何在加号和数字之间分割字符串并将其附加到列表中?
我知道,如果在“ 123 + 123”之间添加空格,则可以拆分它,但我的目标是能够在没有空格的情况下拆分它。只是一大段文字。
到目前为止,我已经尝试将其与加号分开,但这只是将其删除而给我留下[“ 123”,“ 123”]
equation = input("Equation: ")
>> Equation: 123+123
mylist = []
l.append(equation)
for x in mylist:
print(x.split("+"))
>> ["123", "123"]
答案 0 :(得分:1)
使用re.split,您可以使用捕获组保留定界符,并使用lookarounds来声明左边的内容和右边的数字:
(?<=\d)([+])(?=\d)
说明
(?<=\d)
在后面看起来,断言直接在左边是数字([+])
分组捕获+
(?=\d)
前瞻,断言直接在左边是数字import re
s = "123+123"
s = re.compile("(?<=\d)([+])(?=\d)").split(s)
print(s)
结果
['123', '+', '123']
答案 1 :(得分:0)
这会做你想要的。
import re
input_string = '123+123'
output_string = re.split('(\\+)', input_string) # additionally can be written r'(\+)'
print(output_string)
输出为['123', '+', '123']
re.split()行为在文档https://docs.python.org/3/library/re.html#re.split中进行了描述。基本上,这里使用括号组成一个捕获组,并且文本模式作为列表的一部分返回。