我希望有一个正则表达式,只有在前面的行都以关键字'PASS‘开头时,它才能与CLPM_FPGA_xx ID匹配
如果前面的任何一行以单词“FAIL”开头,则不应提取CLPM_FPGA_xx ID
我认为这比较容易,但由于前面的行数是可变的,失败行可能是第一、最后或中间的,所以我一直在挣扎
如有任何建议请见谅。
==示例数据========
通过:锁相环锁定信号在复位状态为0。
通过:锁相环锁定信号状态为1。
传球:锁相环锁定在预期时间内: 5000000 ps。
需求验证: CLPM_FPGA_31
关卡:系统时钟高峰周期为8000 ps。
失败:系统时钟低周期是8000 ps。
关卡:系统时钟周期为16000 ps。
需求验证: CLPM_FPGA_32
通行证:系统时钟到国际金融公司的延迟是10 ps。
需求验证: CLPM_FPGA_31
通行证:系统时钟到国际金融公司的延迟是10 ps。
需求验证: CLPM_FPGA_34
失败:系统时钟低周期是8000 ps。
关卡:系统时钟高峰周期为8000 ps。
关卡:系统时钟周期为16000 ps。
需求验证: CLPM_FPGA_32
关卡:系统时钟高峰周期为8000 ps。
关卡:系统时钟周期为16000 ps。
失败:系统时钟低周期是8000 ps。
需求验证: CLPM_FPGA_32
失败:系统时钟低周期是8000 ps。
需求验证: CLPM_FPGA_33
=====================================
Reg Exp尝试:
^(?!(FAIL:|Requirements)).(\n^PASS:.)+\nRequirements验证:\t+(CLPM_FPGA_.*)
但是,这与在失败后立即发生传球的情况相匹配。
发布于 2022-04-06 13:21:04
其思想是在块上拆分文本,过滤出具有“失败”状态的块,然后找到id。
注意:为了更好地控制匹配,我将ids替换为非重复编号(从31到37)。
可能的解决办法如下:
import re
string = """PASS: PLL Lock signal state at reset is 0.
PASS: PLL Lock signal state is 1.
PASS: PLL Locked within expected time: 5000000 ps.
Requirements verified: CLPM_FPGA_31
PASS: System Clock high period is 8000 ps.
FAIL: System Clock low period is 8000 ps.
PASS: System Clock period is 16000 ps.
Requirements verified: CLPM_FPGA_32
PASS: System Clock to IFC delay is 10 ps.
Requirements verified: CLPM_FPGA_33
PASS: System Clock to IFC delay is 10 ps.
Requirements verified: CLPM_FPGA_34
FAIL: System Clock low period is 8000 ps.
PASS: System Clock high period is 8000 ps.
PASS: System Clock period is 16000 ps.
Requirements verified: CLPM_FPGA_35
PASS: System Clock high period is 8000 ps.
PASS: System Clock period is 16000 ps.
FAIL: System Clock low period is 8000 ps.
Requirements verified: CLPM_FPGA_36
FAIL: System Clock low period is 8000 ps.
Requirements verified: CLPM_FPGA_37"""
string_blocks = string.split("\n\n")
re_pattern = re.compile(r"PASS.+\n.+CLPM_FPGA_(\d+)$", re.M)
result = []
for string_block in string_blocks:
if 'FAIL' not in string_block:
found = re_pattern.findall(string_block)
result.extend(found)
print(result)指纹:
['31', '33', '34']https://stackoverflow.com/questions/71767131
复制相似问题