如何匹配跨多行括号内的内容,提取IP_LIST数组中的IP网段
问题根源
你写的正则存在3个核心问题:
[\n.]属于字符集匹配规则,方括号内的.仅代表字面量小数点,不是通配符,所以只能匹配换行和小数点两类字符,无法匹配字母、数字、斜杠等其他内容- Python
re模块默认.通配符不匹配换行符,跨多行匹配需要显式开启flag - 没有使用非贪婪匹配规则,若文件后续存在其他右括号会出现匹配范围溢出的问题
正确实现代码
import re # 第一步:匹配IP_LIST括号内的全部内容,开启re.DOTALL让.匹配包括换行在内的所有字符 match_res = re.search(r"IP_LIST=\((.*?)\)", out1, flags=re.DOTALL) if match_res: # 提取括号内的原始内容 raw_content = match_res.group(1) # 第二步:匹配所有单引号包裹的IP网段,存入数组 ip_segment_list = re.findall(r"'([^']+)'", raw_content) # 此时ip_segment_list就是你需要的IP网段数组
补充说明
如果你的bash代码里存在右括号转义、双引号包裹IP的特殊情况,只需要调整第二步findall的匹配规则即可适配。
内容的提问来源于stack exchange,提问作者the_lonely_doge
相关产品推荐
相关产品推荐

