Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/313.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 我如何在这里拆分空间分隔的数学运算符?_Python - Fatal编程技术网

Python 我如何在这里拆分空间分隔的数学运算符?

Python 我如何在这里拆分空间分隔的数学运算符?,python,Python,我有一个用户计算器,可以接受数字和用户定义的变量。我的计划是在空格分隔的运算符上拆分语句,例如“+”: import re query = 'house-width + 3 - y ^ (5 * house length)' query = re.findall('[+-/*//]|\d+|\D+', query) print query # ['house-width + ', '3', ' - y ^ (', '5', ' * house length)'] Expecting: ['h

我有一个用户计算器,可以接受数字和用户定义的变量。我的计划是在空格分隔的运算符上拆分语句,例如“+”:

import re
query = 'house-width + 3 - y ^ (5 * house length)'
query = re.findall('[+-/*//]|\d+|\D+', query)
print query  # ['house-width + ', '3', ' - y ^ (', '5', ' * house length)']

Expecting:
['house-width', '+', '3', '-', 'y', '^', '(5', '*', 'house length)']

使用
re.split
并在分割模式周围捕获括号似乎相当有效。只要您在模式中有捕获参数,您正在拆分的模式就会保留在结果列表中:

re.split(' ([+-/*^]|//) ', query)
Out[6]: ['house-width', '+', '3', '-', 'y', '^', '(5', '*', 'house length)']

(注:我假设从原始正则表达式中,您希望捕获
/
整数除法运算符,但不能使用单个字符类,因此作为特例,我已将其移到字符类之外。)

使用
re.split
并在拆分模式周围捕获括号似乎相当有效。只要您在模式中有捕获参数,您正在拆分的模式就会保留在结果列表中:

re.split(' ([+-/*^]|//) ', query)
Out[6]: ['house-width', '+', '3', '-', 'y', '^', '(5', '*', 'house length)']

(PS:我假设从您的原始正则表达式中,您希望捕获
/
整数除法运算符,但不能使用单个字符类,因此作为特例,我将其移到字符类之外。)

要在空间上拆分,请在空间上拆分(这会使“预期”输出中的最后一个值出错)。但是,我建议不要在空格上拆分,而是从一开始就一次读取一个令牌,以获得令牌流。然后,您可以将两个连续的标识符作为复合标识符处理(尽管这似乎是一个糟糕的语言语法)。如果您可以将
房屋长度
转换为
房屋长度
,以便与
房屋宽度
一致,那么您可以在空格上拆分。@PaulRooney:不幸的是,这是不可能的。变量名中将混合使用空格、连字符等。若要在空格上拆分,请在空格上拆分(这会使“预期”输出中的最后一个值出错)。但是,我建议不要在空格上拆分,而是从一开始就一次读取一个令牌,以获得令牌流。然后,您可以将两个连续的标识符作为复合标识符处理(尽管这似乎是一个糟糕的语言语法)。如果您可以将
房屋长度
转换为
房屋长度
,以便与
房屋宽度
一致,那么您可以在空格上拆分。@PaulRooney:不幸的是,这是不可能的。变量名中将混合使用空格、连字符等。