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

我使用 Python 2.7re 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 项


元芳怎么了
浏览 162回答 2
2回答

梦里花落0921

更新如果您坚持使用正则表达式来跟踪失败,您可以执行以下操作: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 组 - 因此,splitted[i-2]和splitted[i-1])
打开App,查看更多内容
随时随地看视频慕课网APP

相关分类

Python