如何让查询MySQL的Python脚本输出实际结果而非SRE_Match对象?
嘿,这个问题我熟!你看到的<_sre.SRE_Match object...>其实是正则匹配返回的匹配对象,而不是实际的字符串结果——你得调用这个对象的方法才能提取出你要的经纬度内容。下面分情况给你讲具体怎么操作:
解决方法:提取正则匹配对象中的实际内容
首先明确:re.match()、re.search()这类方法返回的是Match对象,它包含了匹配的所有元信息,但直接打印只会显示对象的内存标识。要拿到实际的匹配文本,得用这些方法:
1. 单个匹配的情况(找第一个符合的坐标)
如果你的需求是找到ACARS消息里的第一个匹配坐标,用re.search()(比re.match()更实用,因为match只从字符串开头匹配,ACARS里的坐标大概率不在开头),然后调用.group()方法:
import re # 示例ACARS消息文本 acars_message = "ACARS data: NW12345, N67890, E00123" # 正则规则:匹配1-2个方向字符(N/S/E/W组合)+5位数字 coord_pattern = r'[NSEW]{1,2}\d{5}' # 查找第一个匹配 match_result = re.search(coord_pattern, acars_message) # 一定要先判断是否匹配到了,避免报错 if match_result: # 提取整个匹配的字符串 print(match_result.group()) # 输出:NW12345
如果你的正则用了括号分组(比如想单独拆分方向和数字),比如:
coord_pattern = r'([NSEW]{1,2})(\d{5})'
那可以通过group(1)拿方向部分,group(2)拿数字部分:
if match_result: print("方向:", match_result.group(1)) # 输出:NW print("数字:", match_result.group(2)) # 输出:12345
2. 多个匹配的情况(提取所有符合的坐标)
如果ACARS消息里有多个坐标,你有两种选择:
- 用
re.findall():直接返回所有匹配结果的列表,不用手动处理Match对象
all_coords = re.findall(coord_pattern, acars_message) print(all_coords) # 输出:['NW12345', 'N67890', 'E00123']
- 用
re.finditer():返回Match对象的迭代器,适合需要处理每个匹配额外信息(比如匹配位置)的场景
for match in re.finditer(coord_pattern, acars_message): print("找到坐标:", match.group()) # 逐个打印每个坐标
关键提醒
永远记得先判断match_result是否为None——如果没有找到任何匹配,直接调用.group()会抛出AttributeError错误,所以一定要加if match_result:的判断哦!
内容的提问来源于stack exchange,提问作者Nyako
相关产品推荐
相关产品推荐

