正则表达式为 select 一两行

RegEx to select one or two lines

我有以下文字

828 :     test_case := 9001;
829 :     <<signal .ads8363_adc_cnt_tb.u_ads8363_adc_cnt.data_to_ext_device : t_adc_spi_data >> <= force (others => '1');
830 :     wait_fall_edges(1);
831 :     <<signal .ads8363_adc_cnt_tb.u_ads8363_adc_cnt.data_to_ext_device : t_adc_spi_data >> 
832 : <= force (others => '0');
833 :     wait_fall_edges(1);
834 :     <<signal .ads8363_adc_cnt_tb.u_ads8363_adc_cnt.data_to_ext_device : t_adc_spi_data >> <= release;
835 : 
836 :     test_case := 9004;
837 :     <<signal .ads8363_adc_cnt_tb.u_ads8363_adc_cnt.adc_mode_o : std_logic >> <= force '1';
838 :     wait_fall_edges(1);
839 :     <<signal .ads8363_adc_cnt_tb.u_ads8363_adc_cnt.adc_mode_o : std_logic >> <= force '0';
840 :     wait_fall_edges(1);
841 :     <<signal .ads8363_adc_cnt_tb.u_ads8363_adc_cnt.adc_mode_o : std_logic >> <= release;

我正在尝试使用 python 获取(在上面的文本中)强制信号的行 (<= force)。 但是我似乎无法实现这一目标。我可以得到 829、832、837 和 839,但不能(831 和 832)。

我有 r"^.<=\sforce.*?$"gmi which works if the "force" 是一个衬里。

编辑

我想要的上面的输出是得到以下列表

829 :     <<signal .ads8363_adc_cnt_tb.u_ads8363_adc_cnt.data_to_ext_device : t_adc_spi_data >> <= force (others => '1');
831 :     <<signal .ads8363_adc_cnt_tb.u_ads8363_adc_cnt.data_to_ext_device : t_adc_spi_data >> 
832 : <= force (others => '0');
837 :     <<signal .ads8363_adc_cnt_tb.u_ads8363_adc_cnt.adc_mode_o : std_logic >> <= force '1';
839 :     <<signal .ads8363_adc_cnt_tb.u_ads8363_adc_cnt.adc_mode_o : std_logic >> <= force '0';

此致

import re
mystring = '''
828 :     test_case := 9001;
829 :     <<signal .ads8363_adc_cnt_tb.u_ads8363_adc_cnt.data_to_ext_device : t_adc_spi_data >> <= force (others => '1');
830 :     wait_fall_edges(1);
831 :     <<signal .ads8363_adc_cnt_tb.u_ads8363_adc_cnt.data_to_ext_device : t_adc_spi_data >> 
832 : <= force (others => '0');
833 :     wait_fall_edges(1);
834 :     <<signal .ads8363_adc_cnt_tb.u_ads8363_adc_cnt.data_to_ext_device : t_adc_spi_data >> <= release;
835 : 
836 :     test_case := 9004;
837 :     <<signal .ads8363_adc_cnt_tb.u_ads8363_adc_cnt.adc_mode_o : std_logic >> <= force '1';
838 :     wait_fall_edges(1);
839 :     <<signal .ads8363_adc_cnt_tb.u_ads8363_adc_cnt.adc_mode_o : std_logic >> <= force '0';
840 :     wait_fall_edges(1);
841 :     <<signal .ads8363_adc_cnt_tb.u_ads8363_adc_cnt.adc_mode_o : std_logic >> <= release;
'''

output = re.findall(r'^\d+.*(?:\n[^:]+: +)?<= force.*$',mystring,re.MULTILINE)
for line in output:
    print (line)

打印:

829 :     <<signal .ads8363_adc_cnt_tb.u_ads8363_adc_cnt.data_to_ext_device : t_adc_spi_data >> <= force (others => '1');
831 :     <<signal .ads8363_adc_cnt_tb.u_ads8363_adc_cnt.data_to_ext_device : t_adc_spi_data >> 
832 : <= force (others => '0');
837 :     <<signal .ads8363_adc_cnt_tb.u_ads8363_adc_cnt.adc_mode_o : std_logic >> <= force '1';
839 :     <<signal .ads8363_adc_cnt_tb.u_ads8363_adc_cnt.adc_mode_o : std_logic >> <= force '0';

现场演示 here.