我正在抓取一个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+
的内容,这应该会得到预期的结果。