如何分辨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 ,就能正確識別出換行符。
本文鏈接:http://www.yjxzy.net/news/details-12-817.html
版權聲明:
1:本站所有內容均由互聯網收集整理、上傳,并且以計算機技術研究交流為目的,僅供大家參考、學習,不存在任何商業目的與商業用途,如描述有誤或者學術不對之處歡迎及時提出,不甚感謝。
2、 如涉及版權問題,請聯系我們4724325@qq.com第一時間處理;
我們從以下三個方面,對比純靜態和偽靜態兩種靜態頁面生成方式,逐一展開分析。
用JS的正則表達式如何判斷輸入框內為中文或者是英文數字,或者是三者混編
css制作扇形
純CSS3文字Loading動畫特效
PhpStorm 2022.1 EAP 3 在 PHPDoc 和屬性中添加了對多行和嵌套數組形狀的完全支持:在這種情況下,可以使用數組形狀注釋定義數組結構,以獲得鍵的代碼補全并推斷值的類型。
PHP作為Web界第一大語言近年來熱度不夠,但是這幾年的進步和成長卻沒有中斷。在2022伊始,我們來一起學習一下目前PHP的現狀以及最新版本帶來的特性。
Linux程序前臺后臺切換:在Linux終端運行命令的時候,在命令末尾加上 & 符號,就可以讓程序在后臺運行Ubuntu$">root@Ubuntu$ ./tcpserv01 &
彈性布局,又稱“Flex布局”,是由W3C老大哥于2009年推出的一種布局方式。可以簡便、完整、響應式地實現各種頁面布局。而且已經得到所有主流瀏覽器的支持,我們可以放心大膽的使用。