使用正则表达式获取作为浮点变量的字符串

2024-05-16 05:20:27 发布

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

有一个包含以下内容的文件:

ON abc_4abk_keys44a
keyword : c
START c
hashtags;
START
student_4e;
END
professor_u6;
topper_98j;
A.dim 3.246 burst R1;
B.dim 2.642 burst R6;
K.dimension 3.564 burst L4;
END c
ON amc_4sn_bname1
keyword : k4
START k4
hashtags;
START
student_4e;
END
professor_u6;
topper_98j;
A.dim 3.246 burst R1;
B.dim 2.642 burst R6;
K.dimension 3.564 burst L4;
END k4

我想在所有模块中从B.dim中提取2.642,其中title包含像abc_4abk_keys 44a这样的键,为此,首先我需要搜索键,然后在该模块中从START'keyword'到END'keyword',然后提取2.642作为浮点型变量。我想不出要用的正则表达式,有人能帮我吗

import re
import sys

def main()

  path = sys.argv[1]

  with open path as f:
    data = f.read()

  unit = re.findall(r"ON\s+(.*\S)",data)


  if (unit == *keys):
    token = re.findall(r"\.*?B\.dim\s*(.*?)\s*burst",data)

main()

Tags: redataonstartkeywordstudentendabc
1条回答
网友
1楼 · 发布于 2024-05-16 05:20:27

不要使用正则表达式,而是使用split()以空格分隔每一行

循环所有行,并设置一个变量,该变量指示您是否位于与key匹配的单元中

import sys

def main():
    path = sys.argv[1]
    key = 'abc_4abk_keys44a'
    token = None
    with open(path) as f:
        in_unit = False
        for line in f:
            words = line.split()
            if len(words) == 2 and words[0] == 'ON':
                in_unit = key in words[1]
            if in_unit and len(words) == 4 and words[0] == 'B.dim':
                token = float(words[1])
                break
    print(token)

main()

相关问题 更多 >