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:不幸的是,这是不可能的。变量名中将混合使用空格、连字符等。