我正在构建一个简单的方程求解器,并且无法隔离元素。基本上,有两种类型的元素:整数(-12,+ 9)和变量(-3x,-7x,-2x)。我的策略的第一步是使用正则表达式来隔离这两种不同类型的元素:
while True:
tmp = '0'
if (console.readable()):
tmp = input()
... #some tasks
我的正则表达式有两个问题:
它返回一个元组列表
[(' -3x',' 3'),(' -7x',' 7'),(' ; -2x',' 2')]
而不是列表:[' x',' -3x',' -7x',' -2x']
它省略了第一个元素,因为没有数字(2x可以工作)。
感谢您的帮助!
P.S。:我有信心,通过一些研究,我可以编写正则表达式来提取仅数字元素(-12,+ 9),但我真的很难接受这个。
答案 0 :(得分:2)
要获取“变量”,您可以使用
re.findall(r'[+-]?\d*[a-z]', t)
请参阅regex demo。
详情
[+-]?
- 可选的-
或+
字符\d*
- 0+位数[a-z]
- 任何小写的ASCII字母(添加+
以匹配其中的一个或多个)。要获取整数而不包括最后一个数字(=
之后),您可以使用
re.findall(r'[-+]?\b\d+\b(?!$)', t)
<强>详情
[-+]?
- 可选的+
或-
\b\d+\b
- 1个数字作为整个单词(?!$)
- 不在字符串的末尾。如果可以有尾随空格,请替换为(?!\s*$)
。