从一堆长路径中以指数格式浮出数字

问题描述 投票:0回答:1

我有很多字符串,每个字符串对应于文件的路径。

我想在每个字符串中以指数格式提取数字。

例如,我有:

../../Analysis_Pk_vs_Step_BEFORE_NEW_LAUNCH_13_DECEMBRE_22h57/Archive_WP_Pk_der_3_pts_step_7.27168772219203e-07/wm_up

而且我想引出浮点数:7.27168772219203e-07

我想避免使用split方法(带有_分隔符)。

所以我尝试使用python regexp,但找不到使用哪种方法(findallresearchsub)?

[如果有人可以帮助我以简单或简短的方式实现此目标(与wm_up子字符串无关,因为它可能是其他子字符串(例如,例如wm_dw))。

UPDATE 1:抱歉,我没有很好地解释所有问题:

我想提取数字,因为我想对所有这些长字符串进行升序排序。我想使用natsorted

例如,我有初始字母:

../../Analysis_Pk_vs_Step_BEFORE_NEW_LAUNCH_13_DECEMBRE_22h57/Archive_WP_Pk_der_3_pts_step_9.301510038746646e-06/wm_up
../../Analysis_Pk_vs_Step_BEFORE_NEW_LAUNCH_13_DECEMBRE_22h57/Archive_WP_Pk_der_3_pts_step_9.301510038746646e-06/wm_dw
../../Analysis_Pk_vs_Step_BEFORE_NEW_LAUNCH_13_DECEMBRE_22h57/Archive_WP_Pk_der_3_pts_step_9.437191487625705e-05/wm_up
../../Analysis_Pk_vs_Step_BEFORE_NEW_LAUNCH_13_DECEMBRE_22h57/Archive_WP_Pk_der_3_pts_step_9.437191487625705e-05/wm_dw

这是路径数组的natsorted的结果:如您所见,升序考虑的是前几位,而不是我要提取的浮点指数的值(实际值)。我想按此值的升序选择。

希望您能理解。

python regex regex-group
1个回答
2
投票

这里是代码:

l = [
'../../Analysis_Pk_vs_Step_BEFORE_NEW_LAUNCH_13_DECEMBRE_22h57/Archive_WP_Pk_der_3_pts_step_9.301510038746646e-06/wm_up',
'../../Analysis_Pk_vs_Step_BEFORE_NEW_LAUNCH_13_DECEMBRE_22h57/Archive_WP_Pk_der_3_pts_step_9.301510038746646e-06/wm_dw',
'../../Analysis_Pk_vs_Step_BEFORE_NEW_LAUNCH_13_DECEMBRE_22h57/Archive_WP_Pk_der_3_pts_step_9.437191487625705e-05/wm_up',
'../../Analysis_Pk_vs_Step_BEFORE_NEW_LAUNCH_13_DECEMBRE_22h57/Archive_WP_Pk_der_3_pts_step_9.437191487625705e-05/wm_dw'
] # the input that we have
# regex from https://stackoverflow.com/a/4703508/7434857
numeric_const_pattern = '[-+]? (?: (?: \d* \. \d+ ) | (?: \d+ \.? ) )(?: [Ee] [+-]? \d+ ) ?'
rx = re.compile(numeric_const_pattern, re.VERBOSE) # compile the regex
l.sort(key=lambda x: (float(rx.findall(x)[-1]),x))
© www.soinside.com 2019 - 2024. All rights reserved.