Python循环中调用re.search().group()报AttributeError的解决咨询
解决re.search调用.group()时的AttributeError问题
问题出在re.search()找不到匹配时会返回None,你直接在它后面调用.group(),自然会触发AttributeError——None根本没有.group()方法。删掉.group()脚本能跑,是因为打印了None或者匹配对象,但这不是你要的结果。
下面给你两种解决办法:
办法1:先确认匹配存在再提取
循环里先把匹配结果存起来,判断不为None再调用.group(),避免报错:
import re with open(r'C:\Users\testuser\OneDrive - personal\Network\network.log', 'r+') as LOG: OUTPUT = LOG.readlines() for LINE in OUTPUT: match_result = re.search(r'\s+name ".*"', LINE) if match_result: x = match_result.group() print(x)
办法2:直接提取引号内的具体值(更贴合你的需求)
如果你只想拿到"包裹的内容,给正则加个捕获组(用括号把要提取的部分包起来),然后用.group(1)取分组内容:
import re with open(r'C:\Users\testuser\OneDrive - personal\Network\network.log', 'r+') as LOG: OUTPUT = LOG.readlines() for LINE in OUTPUT: # 括号包裹引号内的内容作为捕获组,用.*?做非贪婪匹配避免多引号冲突 match_result = re.search(r'\s+name "(.*?)"', LINE) if match_result: # group(1)对应第一个捕获组,也就是引号里的具体文本 x = match_result.group(1) print(x)
这里用.*?而非.*是为了做非贪婪匹配,防止一行里有多个"时,匹配到超出目标范围的内容。
内容的提问来源于stack exchange,提问作者JohnDoe
相关产品推荐
相关产品推荐

