Python处理文本在Linux和windows下有什么异同?

小灰笔记 发布于 2015/04/12 21:29
阅读 873
收藏 0

之前写过一段Perl脚本,可以一下子删除代码中的所有C语言注释。我大致浏览了一下Python的re模块,感觉差不多。依然是把一个C文件读成一个字符串然后使用sub()进行匹配删除。发现“/× ×/”注释总是无法识别,很是苦恼。

开始以为是正则表达式在两种语言下有差异,后来发现Python代码在Linux环境中正常在Windows下面异常。

正则表达式是一样的,以下是Python代码

哪位大神给解释下为什么?

import re
code_file = open('test.c','r')
code_content = code_file.read()
code_content_temp = re.sub(r'((?<=\n)|^)[ \t]*\/\*.*?\*\/\n?|\/\*.*?\*\/|((?<=\n)|^)[ \t]*\/\/[^\n]*\n|\/\/[^\n]*','',code_content)
print(code_content_temp)

加载中
0
hyxj1220
hyxj1220
window 下 换行用\r\n  你把正则里面的\n 换成\r\n试试
0
寒情漠漠
寒情漠漠

你既然是写兼容的换行还用\n?

0
HappyBKs
HappyBKs

会不会是编码问题。我原先用py写过个爬虫在linux上,但是中文的编码到windows下全乱套了。

换行的话:

windows \r\n

linux \n

mac \r

0
小灰笔记
小灰笔记

引用来自“hyxj1220”的评论

window 下 换行用\r\n  你把正则里面的\n 换成\r\n试试
尝试过,似乎不行,再说我的正则表达式可以匹配到一部分这样的情况。难道得把\r\n看成一个字符?其实,我觉得这个很可能是平台差异呢!因为同样的Python代码处理同样的C代码,效果不一样。Windows上的文件拷贝到Linux也是Windows的格式啊!
0
小灰笔记
小灰笔记

引用来自“寒情漠漠”的评论

你既然是写兼容的换行还用\n?

尝试过,似乎不行,再说我的正则表达式可以匹配到一部分这样的情况。难道得把\r\n看成一个字符?其实,我觉得这个很可能是平台差异呢!因为同样的Python代码处理同样的C代码,效果不一样。Windows上的文件拷贝到Linux也是Windows的格式啊!
0
小灰笔记
小灰笔记

引用来自“HappyBKs”的评论

会不会是编码问题。我原先用py写过个爬虫在linux上,但是中文的编码到windows下全乱套了。

换行的话:

windows \r\n

linux \n

mac \r

尝试过,似乎不行,再说我的正则表达式可以匹配到一部分这样的情况。难道得把\r\n看成一个字符?其实,我觉得这个很可能是平台差异呢!因为同样的Python代码处理同样的C代码,效果不一样。Windows上的文件拷贝到Linux也是Windows的格式啊!我没有写过Python,但是我用Perl的时候不区分平台都能够适配。
返回顶部
顶部