有一段数据包含换行符,像这样:'点 N400350E1163510\r点 N400317E1163557\r点 N400544E1170300\r点 N395736E1170000\r点 N393524E1170000\r点 N392207E1164138\r点 N400350E1163510\rQNH2400 米(不含)以下'

我想用正则表达式匹配其中某一段数据,然后输出到CMD验证正确性。结果命令行把输出数据中的换行符都解析了,甚至我只能看到结果中最后一个\r后面的数据。所以有没有办法让CMD不解析数据中的换行符?请参照下面Python3代码来理解我说的问题。一开始我还一直在找自己的正则表达式哪里是写错了,可最后打印了result.groups()和len(group(1))之后才发现这个问题所在(本问题不是讨论正则表达式)。

就算不能解决也没有关系,这个问题算是自己对Windows CMD做个提醒,希望跟我碰到同样问题的朋友也能看到。

import re
text='点 N400350E1163510\r点 N400317E1163557\r点 N400544E1170300\r点 N395736E1170000\r点 N393524E1170000\r点 N392207E1164138\r点 N400350E1163510\rQNH2400 米(不含)以下'
#数据的起点和终点是相同的
#比如这段数据"点 N400350E1163510"出现了两次,就是我要的一段数据
result=re.search(r'((.+ N[0-9]{6}E[0-9]+(?=[\r])).+\2).+',text)
if result:
# print(result.groups())
print('g1:%s\tg2:%s' % (result.group(1),result.group(2)))
# print('length of g1:%d\tg2:%d' % (len(result.group(1)),len(result.group(2))))
#结论:上面代码在CMD表面看起来结果是一样
#但是打印长度和result.groups()之后就明白怎么回事了
#有时候数据太多没来得及想到会是CMD的问题,所以为了以后可能会继续被CMD干扰还是希望能找到解决办法
#result.groups()是数组打印出来是不会解析换行符的,但是如果有意去list(str)然后输出,那说明已经注意到这个问题所在了。
#所以我们更多的时候在平常正常打印str时怎么解决?不用CMD吗、
我自己也写了一个输出到文件有助于调试数据的常用函数:
#程序运行时输出data到文件。
#当clear=True(默认),也就是文件只保存这一次运行data的数据。
#类似于CMD输出
def output_file(self,filename,data,op='a',encoding='gb18030',clear=True,new_line=True):
#当op为a追加读写文件时,clear标志在程序第一次调用次函数时是否先清空文件
if op == 'a' and clear:
if not hasattr(self,'clear_request'):
self.clear_request={}
#用文件名标记clear状态
if filename not in self.clear_request.keys():
#改为wt模式就当是清空了
op='wt'
else:
pass
self.clear_request[filename]=clear
if type('') != type(data):
data=str(data)
if new_line:
data=data+'\r'
with open(filename,op,encoding=encoding) as f:
f.write(data)

另外我还有一个关于控制变量打印输出次数的的提问,已得到解答,完成了函数精简的实现。