Регулярное выражение не дает ожидаемого результата - PullRequest
0 голосов
/ 16 января 2019

Я использую Python 2.7 re findall, чтобы найти список совпадений, но в первом случае получаю больше, чем я хочу.
Мой исходный код здесь, найти некоторые данные импорта из длинных строк.

Список результатов:

 ('1', 'GLOBAL_SETTINGS')
 ('10', 'TX_MULTI_VERIFICATION 2437 DSSS-1 NON_HT BW-20 TX1') 
 ('12', 'TX_MULTI_VERIFICATION 2412 CCK-11 NON_HT BW-20 TX1')

с пунктами 1, 10, 12. Это не то, что я хочу. Я хочу предметы 9, 11, 12

import re

s='''
Summary
1.GLOBAL_SETTINGS ____________________________________________________________
ANALYSIS_11AC_AMPLITUDE_TRACKING : 0 
ANALYSIS_11AC_DECODE_PSDU      : 0 

PER_WAVEFORM_PREFIX_11AG       :  
PER_WAVEFORM_PREFIX_11B        :  
PER_WAVEFORM_PREFIX_11N        :  
VSA_PORT_CHAIN_MAP             : 0,0,0,0 
VSG_PORT_CHAIN_MAP             : 0,0,0,0 
Test Time = 0.001 s
             :[Info] Function completed.

2.CONNECT_IQ_TESTER __________________________________________________________
APP_ID                         : 1 
APT_ENABLE                     : 0 
DH_ENABLE                      : 0 
 :                               
IQ_NXN_VERSION           :                               
IQ_ZIGBEE_SIGNAL_VERSION :                               
TEST_MANAGER_VERSION     :3.0.0 (2012-8-24)              
3.INSERT_DUT _________________________________________________________________
RELOAD_DUT_DLL                 : 0 
CONNECTION_STRING              : 192.168.100.1:2390 
DUT_DLL_FILENAME               : QCA.dll 
EEPROM_FILENAME                :  
OPTION_STRING                  :  
Test Time = 1.020 s
DUT_VERSION              :QLIB V6        
ERROR_MESSAGE            :[Info] Function completed.

VDUT_VERSION             :3.0.0 (2012-8-24)              
4.INITIALIZE_DUT _____________________________________________________________
Test Time = 0.308 s
DUT_DRIVER_INFO          :5.1                  
DUT_NAME                 :QCA_                       
ERROR_MESSAGE            :[Info] Function completed.

5.LOAD_PATH_LOSS_TABLE _______________________________________________________
RX_PATH_LOSS_FILE              : path_loss.csv 
TX_PATH_LOSS_FILE              : path_loss.csv 
Test Time = 0.001 s
ERROR_MESSAGE            :[Info] Function completed.

6.TX_CALIBRATION _____________________________________________________________
CABLE_LOSS_DB_1                : 0.00 dB
CABLE_LOSS_DB_2                : 0.00 dB
CABLE_LOSS_DB_3                : 0.00 dB
CABLE_LOSS_DB_4                : 0.00 dB
DUT_SETTLE_TIME                : 0.00 MS
SAMPLING_TIME_US               : 150.00 uS
TX_CAL_TIMEOUT_MS              : 600000.00 MS
Test Time = 33.392 s
CABLE_LOSS_DB_2          :          14.90              dB (, )
CAL_RESULT_1             :                               
CAL_RESULT_2             :                               
CAL_RESULT_3             :                               
CAL_RESULT_4             :                               
ERROR_MESSAGE            :[Info] Function completed.

7.TX_CLPC_CALIBRATION ________________________________________________________
CABLE_LOSS_DB_1                : 0.00 dB
CABLE_LOSS_DB_2                : 0.00 dB
CABLE_LOSS_DB_3                : 0.00 dB
CABLE_LOSS_DB_4                : 0.00 dB
SAMPLING_TIME_US               : 150.00 uS
TX_CAL_TIMEOUT_MS              : 600000.00 MS
    Skipped by ALWAYS_SKIP

8.FINALIZE_EEPROM ____________________________________________________________
COMMIT_EEPROM_TEMPLATE         : 20 
COMPRESS                       : 1 
MEMORY_SIZE                    : 0 
MEMORY_TYPE                    : 5 
OVERWRITE                      : 1 
SECTION_MASK_BIT0_ALL          : 0 
SECTION_MASK_BIT10_SDIO_PID    : 0 
S
SECTION_MASK_BIT6_5G_CONTROL_DATA : 0 
SECTION_MASK_BIT7_CONFIG_DATA  : 0 
SECTION_MASK_BIT8_CUSTOMER_DATA : 0 
SECTION_MASK_BIT9_USB_VID_PID  : 0 
    Skipped by ALWAYS_SKIP
9.TX_MULTI_VERIFICATION 2412 DSSS-1 NON_HT BW-20 TX1 _________________________
ARRAY_HANDLING_METHOD          : 0 
BSS_FREQ_MHZ_PRIMARY           : 2412 MHz
BSS_FREQ_MHZ_SECONDARY         : 0 MHz
CH_FREQ_MHZ                    : 2412 MHz
PHASE_ERR_1              :           0.37           Degree (, )
PHASE_NOISE_RMS_ALL      :           0.00           Degree (, )
POWER_AVG_1              :          21.07             dBm (, )
POWER_AVG_DBM            :          21.07             dBm (19.00, 25.00)--[failed]
SYMBOL_CLK_ERR           :          -5.76             ppm (, )
TX_POWER_DBM             :          22.00             dBm (, )
VIOLATION_PERCENT        :           0.00               % (0.00, 0.00)
SPECTRUM_FLATNESS_RAW_DATA:Not Display                  dB (, )
SPECTRUM_RAW_DATA_X      :Not Display               dBm/100kHz (, )
SPECTRUM_RAW_DATA_Y      :Not Display               dBm/100kHz (, )
ERROR_MESSAGE            :[Info] Function completed.

10.TX_MULTI_VERIFICATION 2437 DSSS-1 NON_HT BW-20 TX1 ________________________
ARRAY_HANDLING_METHOD          : 0 
BSS_FREQ_MHZ_PRIMARY           : 2437 MHz
BSS_FREQ_MHZ_SECONDARY         : 0 MHz
CH_FREQ_MHZ                    : 2437 MHz
CH_FREQ_MHZ_PRIMARY_20MHz      : 0 MHz
ENABLE_EVM                     : 1 
ENABLE_MASK                    : 1 
ENABLE_POWER                   : 0 
ENABLE_SPECTRUM                : 1 
NUM_STREAM_11AC                : 1 
TX1                            : 1 
TX2                            : 0 
TX3                            : 0 

POWER_AVG_1              :          20.83             dBm (, )
POWER_AVG_DBM            :          20.83             dBm (19.00, 25.00)
SYMBOL_CLK_ERR           :          -6.03             ppm (, )
TX_POWER_DBM             :          22.00             dBm (, )
VIOLATION_PERCENT        :           0.00               % (0.00, 0.00)
SPECTRUM_FLATNESS_RAW_DATA:Not Display                  dB (, )
SPECTRUM_RAW_DATA_X      :Not Display               dBm/100kHz (, )
SPECTRUM_RAW_DATA_Y      :Not Display               dBm/100kHz (, )
ERROR_MESSAGE            :[Info] Function completed.

11.TX_MULTI_VERIFICATION 2472 DSSS-1 NON_HT BW-20 TX1 ________________________
ARRAY_HANDLING_METHOD          : 0 
BSS_FREQ_MHZ_PRIMARY           : 2472 MHz
BSS_FREQ_MHZ_SECONDARY         : 0 MHz
PHASE_ERR_1              :           0.37           Degree (, )
PHASE_NOISE_RMS_ALL      :           0.00           Degree (, )
POWER_AVG_1              :          20.86             dBm (, )
POWER_AVG_DBM            :          20.86             dBm (19.00, 25.00)--[failed]
SYMBOL_CLK_ERR           :          -6.26             ppm (, )
TX_POWER_DBM             :          22.00             dBm (, )
VIOLATION_PERCENT        :           0.00               % (0.00, 0.00)
SPECTRUM_FLATNESS_RAW_DATA:Not Display                  dB (, )
SPECTRUM_RAW_DATA_X      :Not Display               dBm/100kHz (, )
SPECTRUM_RAW_DATA_Y      :Not Display               dBm/100kHz (, )
ERROR_MESSAGE            :[Info] Function completed.

12.TX_MULTI_VERIFICATION 2412 CCK-11 NON_HT BW-20 TX1 ________________________
ARRAY_HANDLING_METHOD          : 0 
BSS_FREQ_MHZ_PRIMARY           : 2412 MHz
BSS_FREQ_MHZ_SECONDARY         : 0 MHz
CH_FREQ_MHZ                    : 2412 MHz
CH_FREQ_MHZ_PRIMARY_20MHz      : 0 MHz
PHASE_ERR_1              :           0.97           Degree (, )
PHASE_NOISE_RMS_ALL      :           0.42           Degree (, )
POWER_AVG_1              :          21.14             dBm (, )
POWER_AVG_DBM            :          21.14             dBm (19.00, 25.00)--[failed]
SYMBOL_CLK_ERR           :          -6.06             ppm (, )
TX_POWER_DBM             :          22.00             dBm (, )
VIOLATION_PERCENT        :           0.00               % (0.00, 0.00)
SPECTRUM_FLATNESS_RAW_DATA:Not Display                  dB (, )
SPECTRUM_RAW_DATA_X      :Not Display               dBm/100kHz (, )
SPECTRUM_RAW_DATA_Y      :Not Display               dBm/100kHz (, )
ERROR_MESSAGE            :[Info] Function completed.'''





if __name__ == '__main__':



    t=re.findall(r'(\d{1,2})\.(.{50,100}_{15}).+?\[failed\]',s,re.M|re.DOTALL)   
    print t

Ответы [ 2 ]

0 голосов
/ 16 января 2019

Вы можете использовать re.split для разделения на разделы, а затем искать строку [failed] в каждом разделе:

splitted = re.split(r'(\d{1,2})\.(.*)(?= _{3,})', text)

failed = [(splitted[i-2], splitted[i-1]) for i, s in enumerate(splitted) if re.search(r'\[failed\]', s)]

failed
# [('9', 'TX_MULTI_VERIFICATION 2412 DSSS-1 NON_HT BW-20 TX1'), 
#  ('11', 'TX_MULTI_VERIFICATION 2472 DSSS-1 NON_HT BW-20 TX1'), 
#  ('12', 'TX_MULTI_VERIFICATION 2412 CCK-11 NON_HT BW-20 TX1')]

Здесь re.split разбивает текст на три подгруппы:
1. Группа 1 (номер раздела)
2. Группа 2 (название раздела)
3. Группа 3 (тело раздела)

Если в группе 3 есть совпадение, вы возвращаетесь к группе 1 и 2 - следовательно, splitted[i-2] и splitted[i-1])

0 голосов
/ 16 января 2019

UPDATE

Если вы настаиваете на использовании регулярного выражения для отслеживания сбоев, вы можете сделать что-то вроде следующего:

for i in s.split('\n'):
    number = re.findall(r'^\d+', i)
    if number: failure = re.findall(r'^(\d+)\.(.*?)\s_{2,}', i)
    if 'failed' in i:
        print(failure)

Возвращает:

[('9', 'TX_MULTI_VERIFICATION 2412 DSSS-1 NON_HT BW-20 TX1')]
[('11', 'TX_MULTI_VERIFICATION 2472 DSSS-1 NON_HT BW-20 TX1')]
[('12', 'TX_MULTI_VERIFICATION 2412 CCK-11 NON_HT BW-20 TX1')]

Вы можете увидеть форму этого регулярного выражения в действии здесь .

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...