正则表达式:表达式中的提取数字

时间:2017-09-02 05:46:21

标签: regex python-3.x

假设我有以下表达式:

"1+3x+52-9-45x+x"

我的目标是提取所有常量: [1,+ 52,-9

我尝试过使用Python:

re.findall("[+-]?\d+","1+3x+52-9-45x+x")

结果是:

  

['1','+ 3','+ 52',' - 9',' - 45']

这是不正确的,因为x的系数也被提取出来。

我也尝试过:

re.findall("[+-]?\d+[+-]?","1+3x+52-9-45x+x")

但仍然没有工作。

1 个答案:

答案 0 :(得分:3)

试试这个正则表达式:

(?:[+-])?\b\d+\b

Demo

OR

(?:[+-])?\d+(?=[\s+-]|$)

Demo

解释(对于第一个正则表达式):

  • (?:[+-])匹配+-(如果需要,可添加更多运算符)
  • ?制作+-可选
  • \b\d+\b匹配2个非单词之间的1位或更多位数(因此不包含系数)

解释(针对第二个正则表达式):

  • (?:[+-])匹配+-(如果需要,可添加更多运算符)
  • ?制作+-可选
  • \d+(?=[+-])匹配一个或多个数字(贪婪),紧接着是+-或空格,或者如果它是行尾。如果需要,可以添加更多运算符。