如何获取python中子串指定范围内的数字?

How to get a number within a specified range of a substring in python?

−3.7% [95% CI, −10.2% 至 2.7%]; P = .26)

以上是我正在使用的字符串示例,但我想获取字符串中的所有数字及其分类器,即减号(如果为负数)、% 和小数点。

此字符串可以更改,但此字符串的模式是一致的:

主要测量值%[置信区间%CI,CI低端%至CI高端%]; P=P值)

目前我正在使用一种代码,该代码基于相对于子字符串“CI”和“P=”的特定索引提取数字来提取此数据,但它不是 100% 可靠,因为另一个字符串可能有不同的数字位数,可能有也可能没有负数,这意味着对索引号进行硬编码不会提取正确的值。

不同字符串的示例:

10.7% [95% CI, 1.2% 至 12.7%]; P = .1)

我希望能够将数值分配给以下变量,包括任何负号、数字的不同位数、% ​​符号和小数符号。

所需的字符串和输出示例:

string_1 = "10.7% [95% CI, 1.2% to 12.3%]; P = .1)"

期望输出

主要测量值是 10.7%

CI 下限为 1.2%

CI 高端为 12.3%

P值为.1

string_2 = "−3.7% [95% CI, −10.2% to 2.7%]; P = .26)"

期望输出

主要测量值为 -3.7%

CI 下限为 -10.2%

CI 上限为 2.7%

P 值为 .26

如果所有字符串都遵循相同的模式,是否有动态方法来获取上述变量的预期值?

编辑:好吧,这里有一个更好的解决方案,使用单个正则表达式调用

import re

s = "−3.7% [95% CI, −10.2% to 2.7%]; P= .26)"
values = re.findall(r'([−.%\d]+)', s)

我使用正则表达式模块来提取所需输出的值。结果是包含您的值的字符串列表。

然后你可以做类似print('Primary Measure Value is', values[0])等的事情