正则搜索无法提取配置文本中TRANSITION、DESTINATION参数值的优化咨询
原代码存在的问题
- 文件读取逻辑错误:代码里写的
line=f.readlines是直接引用文件对象的readlines方法,并没有实际调用方法读取内容,后续把这个方法对象转成字符串后,完全不包含test.txt里的实际文本,自然搜不到目标字段。 - 正则匹配范围错误:初始正则仅匹配了
TRANSITION/DESTINATION这两个字段名本身,没有覆盖字段后面的参数值部分,就算匹配成功也只能拿到字段名,拿不到需要的数值。 - 变量引用错误:判断分支中使用了未定义的
searchObj.group(),正常运行会直接触发变量不存在的报错。
可直接运行的优化代码
匹配规则会自动识别字段名和后面紧跟的逗号分隔数值,不需要手动处理空格拆分:
import re # 完整读取文件所有文本内容 with open('test.txt', 'r', encoding='utf-8') as f: full_text = f.read() # 匹配规则:分别抓TRANSITION、DESTINATION后面的两组数字 trans_re = r'TRANSITION=(\d+),(\d+)' dest_re = r'DESTINATION=(\d+),(\d+)' trans_match = re.search(trans_re, full_text) dest_match = re.search(dest_re, full_text) # 初始化存储变量 transition = [] destination = [] if trans_match: # 把匹配到的两个数字转成整数存入列表 transition = [int(trans_match.group(1)), int(trans_match.group(2))] print("Transition 参数:", transition) else: print("Transition 参数缺失!") if dest_match: destination = [int(dest_match.group(1)), int(dest_match.group(2))] print("Destination 参数:", destination) else: print("Destination 参数缺失!") # 如果需要拆成4个独立变量,直接解包列表即可 trans_left, trans_right = transition dest_left, dest_right = destination
规则里的括号是正则捕获组,会自动提取等号前后的数值,不管字段前后有多少空格分隔都能正常识别,就算两个字段不在同一行也能稳定匹配。
内容的提问来源于stack exchange,提问作者user175924
相关产品推荐
相关产品推荐

