如何分辨python换行符,Python换行符的多行模式
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的正则表达式如何判断输入框内为中文或者是英文数字,或者是三者混编
css制作扇形
纯CSS3文字Loading动画特效
PhpStorm 2022.1 EAP 3 在 PHPDoc 和属性中添加了对多行和嵌套数组形状的完全支持:在这种情况下,可以使用数组形状注释定义数组结构,以获得键的代码补全并推断值的类型。
PHP作为Web界第一大语言近年来热度不够,但是这几年的进步和成长却没有中断。在2022伊始,我们来一起学习一下目前PHP的现状以及最新版本带来的特性。
Linux程序前台后台切换:在Linux终端运行命令的时候,在命令末尾加上 & 符号,就可以让程序在后台运行Ubuntu$">root@Ubuntu$ ./tcpserv01 &
弹性布局,又称“Flex布局”,是由W3C老大哥于2009年推出的一种布局方式。可以简便、完整、响应式地实现各种页面布局。而且已经得到所有主流浏览器的支持,我们可以放心大胆的使用。