网站专题BANNER

如何分辨python换行符,Python换行符的多行模式

发表日期:2022-02-16 文章编辑:洛壹网络 文章来源:深圳网站制作

Python 的正则表达式支持 多行模式,将每行文字分别匹配。然而各种操作系统里,换行符的表示法各不相同,会导致 Python 不能正确使用多行模式。


花式换行符


不同操作系统下, 换行符的表示方法 也不同。主要有以下三种:


操作系统


换行符名称


16 进制值


10 进制值


转义表示


Unix、Linux


LF


0A


10


\n


Windows、DOS


CR LF


0D 0A


13 10


\r \n


Mac


CR


0D


13


\r


测试 Python 的表现


如果 Python 不能正确识别换行符,就无法按照期望,进入多行模式的匹配模式。


可以使用下面的脚本来检验各种换行符下,不同版本Python 能否正确进入多行模式。脚本如下:


import re


print(re.findall(r"^\w+$", "hello\r\nbye\r\n", re.M))


如果结果是 ['hello', 'bye'] ,说明正确进入了多行模式;而如果结果是 [] , 则说明没有正常进入多行模式。


测试结果


操作系统


换行符表示


Python 2.7


Python 3.6


Unix、Linux


\n


['hello', 'bye'] ✔


['hello', 'bye'] ✔


Windows、DOS


\r \n


[] ✘


[] ✘


Mac


\r


[] ✘


[] ✘


测试结果说明,只有 \n 这种换行符能成功将 Python 带入 多行模式。


如何分辨换行符


那么面对传来的字节流,无论是来自文件、网络,如何知道其中的换行符是 上节 中的那种呢?我们需要以将字符串用二进制形式表达。


下面这个脚本可以观察字节流的二进制表示:


s=["hello\n","hello\r\n","hello\r"]


for y in s: print(' '.join(format(ord(x), 'b') for x in y))


得到结果为:


1101000 1100101 1101100 1101100 1101111 1010 #\n


1101000 1100101 1101100 1101100 1101111 1101 1010 #\r\n


1101000 1100101 1101100 1101100 1101111 1101 #\r


如何纠正


那么怎么将换行符调整到 适合 Python 进入多行模式的呢?可以使用 re.sub() 查找替换函数:


print(re.findall(r"^\w+$", re.sub(r"\r","\n",s), re.M))


或者


print(re.findall(r"^\w+$", re.sub(r"\r","",s), re.M))


将所有的 \r 删除或者 替换为 \n ,就能正确识别出换行符。


相关内容
纯静态和伪静态的区别?

我们从以下三个方面,对比纯静态和伪静态两种静态页面生成方式,逐一展开分析。

用JS的正则表达式如何判断输入框内为中文或者是英文数字,或者是三者混编

用JS的正则表达式如何判断输入框内为中文或者是英文数字,或者是三者混编

css制作扇形

css制作扇形

纯CSS3文字Loading动画特效

纯CSS3文字Loading动画特效

PhpStorm 2022.1 EAP#3 发布:增强多行和嵌套数组形状

PhpStorm 2022.1 EAP 3 在 PHPDoc 和属性中添加了对多行和嵌套数组形状的完全支持:在这种情况下,可以使用数组形状注释定义数组结构,以获得键的代码补全并推断值的类型。

2022年PHP的现状以及最新版本带来的特性

PHP作为Web界第一大语言近年来热度不够,但是这几年的进步和成长却没有中断。在2022伊始,我们来一起学习一下目前PHP的现状以及最新版本带来的特性。

网站开发技术分享:Linux程序前台后台切换详解

Linux程序前台后台切换:在Linux终端运行命令的时候,在命令末尾加上 & 符号,就可以让程序在后台运行Ubuntu$">root@Ubuntu$ ./tcpserv01 &

影响整个网页的成败,Flex弹性布局介绍

弹性布局,又称“Flex布局”,是由W3C老大哥于2009年推出的一种布局方式。可以简便、完整、响应式地实现各种页面布局。而且已经得到所有主流浏览器的支持,我们可以放心大胆的使用。

我们
定制
咨询
联系
在线咨询
您的浏览器版本太低

请升级您的浏览器: Internet Explorer11 或以下浏览器: Firefox  /  Chrome  /  360极速浏览器