为了账号安全,请及时绑定邮箱和手机立即绑定

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

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

元芳怎么了 2021-10-12 16:28:57
我使用 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 项
查看完整描述

2 回答

?
梦里花落0921

TA贡献1772条经验 获得超6个赞

更新


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


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')]

您可以在此处查看此正则表达式的一种形式。


查看完整回答
反对 回复 2021-10-12
?
缥缈止盈

TA贡献2041条经验 获得超4个赞

您可以使用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])


查看完整回答
反对 回复 2021-10-12
  • 2 回答
  • 0 关注
  • 161 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
微信客服

购课补贴
联系客服咨询优惠详情

帮助反馈 APP下载

慕课网APP
您的移动学习伙伴

公众号

扫描二维码
关注慕课网微信公众号