Regex将负整数返回为正



我正在抓取一个web并提取一些值,从中我只需要数字的一半。例如,如果字符串说"-14.32千卡/摩尔";,我想买浮子-14.32

为此,我正在应用以下代码:

import re
number_string = '-9.2 kcal/mole'

number = re.search(r"[-+]?d*.d+|d+", number_string).group()
print(number)

输出:-9.2

只要number_string是一个浮点值,它就可以正常工作。但是当这个数字是一个负整数时,我得到这个数字的正值。

例如,

import re
number_string = '-4 kcal/mole'

number = re.search(r"[-+]?d*.d+|d+", number_string).group()
print(number)

输出:4(而不是-4(

|是优先级最低的运算符。您正在寻找一个非零浮动

[-+]?d*.d+

或无符号整数

d+

您需要为匹配绝对值的表达式加括号,以使符号应用于以下任一项:

[-+]?(?:d*.d+|d+)

或者使分数部分是可选的。

[-+]?d*(?:.d+)?

在这两种情况下,我都使用了非捕获组来避免更改以下对groups方法的调用的语义。

我会使用这样的东西:

[+-]?(?:d*.)?d+
  • [+-]?-可选正号或负号
  • (?:d*.)?-可选前导数字后接小数
  • d+-必填数字

https://regex101.com/r/WKPQ4h/1


由于您正在抓取web内容,此正则表达式将简单地查找所有数字。

您可能希望针对特定的测量单位:

[+-]?(?:d*.)?d+(?= (?:kcal/mole|butterflies))

https://regex101.com/r/FM5ZXJ/1

您的正则表达式设置为搜索[-+]?d*.d+d+,这就是为什么会发生这种情况。您可以将正则表达式更改为类似[-+]?d*.d+|[-+]?d+的内容,这应该会得到预期的结果。

最新更新