如何拆分 python 列表元素中的两个字符?

How can I split between two characters in a list element in python?

我正在尝试创建可以将数学方程划分为不同部分(数字和运算符)的字符串解析器。现在,我正在尝试创建一个列表来分隔不同的部分。

例如:[“123”、“+”、“123”]

但是,我正在尝试以一种不需要我在输入中写入 spaces 的方式进行。而不是输入:“123 + 123”,我想写:“123 + 123”。我将如何拆分加号和数字之间的字符串并将其附加到列表中?

我知道如果我在“123+123”之间添加一个 space,我将能够拆分它,但我的目标是能够在没有 [=22 的情况下拆分它=]s;只是一大段文字。

到目前为止,我已经尝试将它从加号中拆分出来,但只是删除了它,只剩下 ["123", "123"]

equation = input("Equation: ")

>> Equation: 123+123

mylist = []

l.append(equation)

for x in mylist:
    print(x.split("+"))

>> ["123", "123"]

这会做你想做的事。

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 中进行了描述。基本上在这里使用括号创建一个捕获组,文本模式作为列表的一部分返回。

使用re.split you could use a capturing group to keep the delimiter and lookarounds断言左边是数字,右边是数字:

(?<=\d)([+])(?=\d)

说明

  • (?<=\d) 正向后视,断言直接在左边的是一个数字
  • ([+])在群里抓一个+
  • (?=\d) 正面前瞻,断言直接左边是数字

Regex demo | Python demo

import re

s = "123+123"
s = re.compile("(?<=\d)([+])(?=\d)").split(s)
print(s)

结果

['123', '+', '123']