Python 正则表达式不产生预期结果

Python 正则表达式不产生预期结果,python,regex,Python,Regex,我使用Python2.7ReFindall来查找匹配案例列表,但是第一个案例得到的比我想要的更多。 我的源代码在这里,从长字符串中找到一些导入数据 结果如下: ('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项。这不是我想要的。

我使用Python2.7ReFindall来查找匹配案例列表,但是第一个案例得到的比我想要的更多。 我的源代码在这里,从长字符串中找到一些导入数据

结果如下:

 ('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
更新

如果坚持使用正则表达式跟踪失败,可以执行以下操作:

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')]
您可以看到此正则表达式的一种形式正在运行。

您可以使用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组-因此,拆分[i-2]和拆分[i-1]

有些人在遇到问题时会想:“我知道,我将使用正则表达式。”现在他们有两个问题。您是否在这个庞大的多行字符串的子集上尝试过您的方法?您应该对自己进行bug测试,如果您需要帮助,请提供问题的最低版本。如:?。。。但为什么是正则表达式?这似乎不是一个适合正则表达式的问题。只有一个方法尝试搜索子集?获得正确的结果?最好使用^$|\Z而不是两个空格。我的意思是。。。虽然这是OP 9,11和12。。。这显然不是他们精神上想要的。他们想要[失败的]零件。如果我不知道哪一项包括失败?mybe还有其他项目,包括失败。问题的失败部分并不十分清楚。我已经相应地更新了我的答案以适应。