如何分辨python換行符,Python換行符的多行模式
Python 的正則表達(dá)式支持 多行模式,將每行文字分別匹配。然而各種操作系統(tǒng)里,換行符的表示法各不相同,會(huì)導(dǎo)致 Python 不能正確使用多行模式。
花式換行符
不同操作系統(tǒng)下, 換行符的表示方法 也不同。主要有以下三種:
操作系統(tǒng)
換行符名稱
16 進(jìn)制值
10 進(jìn)制值
轉(zhuǎn)義表示
Unix、Linux
LF
0A
10
\n
Windows、DOS
CR LF
0D 0A
13 10
\r \n
Mac
CR
0D
13
\r
測試 Python 的表現(xiàn)
如果 Python 不能正確識(shí)別換行符,就無法按照期望,進(jìn)入多行模式的匹配模式。
可以使用下面的腳本來檢驗(yàn)各種換行符下,不同版本Python 能否正確進(jìn)入多行模式。腳本如下:
import re
print(re.findall(r"^\w+$", "hello\r\nbye\r\n", re.M))
如果結(jié)果是 ['hello', 'bye'] ,說明正確進(jìn)入了多行模式;而如果結(jié)果是 [] , 則說明沒有正常進(jìn)入多行模式。
測試結(jié)果
操作系統(tǒng)
換行符表示
Python 2.7
Python 3.6
Unix、Linux
\n
['hello', 'bye'] ?
['hello', 'bye'] ?
Windows、DOS
\r \n
[] ?
[] ?
Mac
\r
[] ?
[] ?
測試結(jié)果說明,只有 \n 這種換行符能成功將 Python 帶入 多行模式。
如何分辨換行符
那么面對(duì)傳來的字節(jié)流,無論是來自文件、網(wǎng)絡(luò),如何知道其中的換行符是 上節(jié) 中的那種呢?我們需要以將字符串用二進(jìn)制形式表達(dá)。
下面這個(gè)腳本可以觀察字節(jié)流的二進(jìn)制表示:
s=["hello\n","hello\r\n","hello\r"]
for y in s: print(' '.join(format(ord(x), 'b') for x in y))
得到結(jié)果為:
1101000 1100101 1101100 1101100 1101111 1010 #\n
1101000 1100101 1101100 1101100 1101111 1101 1010 #\r\n
1101000 1100101 1101100 1101100 1101111 1101 #\r
如何糾正
那么怎么將換行符調(diào)整到 適合 Python 進(jìn)入多行模式的呢?可以使用 re.sub() 查找替換函數(shù):
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 ,就能正確識(shí)別出換行符。
本文鏈接:http://jmtianhui.com/news/details-12-817.html
版權(quán)聲明:
1:本站所有內(nèi)容均由互聯(lián)網(wǎng)收集整理、上傳,并且以計(jì)算機(jī)技術(shù)研究交流為目的,僅供大家參考、學(xué)習(xí),不存在任何商業(yè)目的與商業(yè)用途,如描述有誤或者學(xué)術(shù)不對(duì)之處歡迎及時(shí)提出,不甚感謝。
2、 如涉及版權(quán)問題,請(qǐng)聯(lián)系我們4724325@qq.com第一時(shí)間處理;
我們從以下三個(gè)方面,對(duì)比純靜態(tài)和偽靜態(tài)兩種靜態(tài)頁面生成方式,逐一展開分析。
用JS的正則表達(dá)式如何判斷輸入框內(nèi)為中文或者是英文數(shù)字,或者是三者混編
css制作扇形
純CSS3文字Loading動(dòng)畫特效
PhpStorm 2022.1 EAP 3 在 PHPDoc 和屬性中添加了對(duì)多行和嵌套數(shù)組形狀的完全支持:在這種情況下,可以使用數(shù)組形狀注釋定義數(shù)組結(jié)構(gòu),以獲得鍵的代碼補(bǔ)全并推斷值的類型。
PHP作為Web界第一大語言近年來熱度不夠,但是這幾年的進(jìn)步和成長卻沒有中斷。在2022伊始,我們來一起學(xué)習(xí)一下目前PHP的現(xiàn)狀以及最新版本帶來的特性。
Linux程序前臺(tái)后臺(tái)切換:在Linux終端運(yùn)行命令的時(shí)候,在命令末尾加上 & 符號(hào),就可以讓程序在后臺(tái)運(yùn)行Ubuntu$">root@Ubuntu$ ./tcpserv01 &
彈性布局,又稱“Flex布局”,是由W3C老大哥于2009年推出的一種布局方式??梢院啽?、完整、響應(yīng)式地實(shí)現(xiàn)各種頁面布局。而且已經(jīng)得到所有主流瀏覽器的支持,我們可以放心大膽的使用。