如何正则表达式搜索此字符串?

2024-06-03 08:22:41 发布

您现在位置:Python中文网/ 问答频道 /正文

我有一个字符串,它是包causalimpact的输出,我需要得到这个字符串中某个地方的实际平均和累积效应的数字:

“后验推断{因果影响}\n平均累积\n实际3.43 13.7\n预测(s.d.)3.38(0.02)13.53(0.08)\n 95%可信区间[3.34,3.42][13.38,13.68]\n\n溶质效应(s.d.)0.04(0.02)0.17(0.08)\n95%CI[0.01,0.08][0.02,0.33]\n\n相对效应(s.d.)1.27%(0.57%)1.27%(0.57%)\n95%CI[0.18%,2.41%][0.18%,2.41%]\n\n绝缘体尾部区域概率p:0.01\n绝缘体概率:99.2%\n\n有关详细信息,请运行命令:print(impact.summary('report')”

当我打印(ci.summary)时,我会得到一个漂亮且有序的表格,如下所示:

Posterior Inference {Causal Impact}
                          Average            Cumulative
Actual                    3.43               13.7
Prediction (s.d.)         3.38 (0.02)        13.53 (0.08)
95% CI                    [3.34, 3.42]       [13.38, 13.68]

Absolute effect (s.d.)    0.04 (0.02)        0.17 (0.08)
95% CI                    [0.01, 0.08]       [0.02, 0.33]

Relative effect (s.d.)    1.27% (0.57%)      1.27% (0.57%)
95% CI                    [0.18%, 2.41%]     [0.18%, 2.41%]

Posterior tail-area probability p: 0.01
Posterior prob. of a causal effect: 99.2%

For more details run the command: print(impact.summary('report'))

我如何进行研究并获得实际的、绝对的和相对的效果

这是我目前使用的p值:

r1 = re.search('tail-area probability p: (.+?)\nPosterior prob.', ci.summary())

Tags: 字符串reportciareasummary概率效应tail
1条回答
网友
1楼 · 发布于 2024-06-03 08:22:41

您可以使用r'-?\d+(?:\.\d+)?'查找文本中的数字以及^{}和正则表达式命名的组

import re

s = '''
Posterior Inference {Causal Impact}\n Average Cumulative\nActual 3.43 13.7\nPrediction (s.d.) 3.38 (0.02) 13.53 (0.08)\n95% CI [3.34, 3.42] [13.38, 13.68]\n\nAbsolute effect (s.d.) 0.04 (0.02) 0.17 (0.08)\n95% CI [0.01, 0.08] [0.02, 0.33]\n\nRelative effect (s.d.) 1.27% (0.57%) 1.27% (0.57%)\n95% CI [0.18%, 2.41%] [0.18%, 2.41%]\n\nPosterior tail-area probability p: 0.01\nPosterior prob. of a causal effect: 99.2%\n\nFor more details run the command: print(impact.summary('report'))
'''

# get digits optionally follow by a decimal part and prefixed with a negative sign.
nums = r'-?\d+(?:\.\d+)?'

regex = re.compile(
    rf"Actual\s(?P<actual_avg>{nums}).*?"
    rf"(?P<actual_cumul>{nums})\n.*?"
    rf"Absolute effect \(s\.d\.\)\s(?P<abs_avg>{nums}).*?"
    rf"\(.*?\).*?(?P<abs_cumul>{nums}).*?"
    rf"Relative effect \(s\.d\.\)\s(?P<relative_avg>{nums})%.*?"
    rf"\(.*?\).*?(?P<relative_cumul>{nums})%.*?"
, re.DOTALL)

for r in regex.finditer(s):
    print(r.groupdict())
{
    "actual_avg": "3.43",
    "actual_cumul": "13.7",
    "abs_avg": "0.04",
    "abs_cumul": "0.17",
    "relative_avg": "1.27",
    "relative_cumul": "1.27",
}

相关问题 更多 >