正则表达式为 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.
我有以下文字
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.