【问题标题】:How can I split between two characters in a list element in python?如何在 python 中的列表元素中拆分两个字符?
【发布时间】:2019-06-22 19:21:50
【问题描述】:

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

例如:[“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"]

【问题讨论】:

  • 欢迎来到 SO!你的表达有多复杂?是否允许减法、乘法和除法?小数点?前导零?请列举您希望遇到的所有规则。如果表达式涉及嵌套,请使用this,否则,re.findall(r"\d+|\D", s) 应该可以帮助您入门。

标签: python list split equation


【解决方案1】:

使用re.split,您可以使用捕获组来保留分隔符,并使用lookarounds 来断言左侧是数字,右侧是数字:

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

说明

  • (?&lt;=\d) 正向向后看,断言左边是一个数字
  • ([+]) 在群组中捕获+
  • (?=\d) 正向前瞻,断言左边是数字

Regex demo | Python demo

import re

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

结果

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

【讨论】:

    【解决方案2】:

    这会做你想做的。

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2017-04-25
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2020-11-13
      • 2023-04-05
      • 1970-01-01
      相关资源
      最近更新 更多