我想刪除包裝到一定寬度的文本的行返回。例如刪除包裝行返回
import re
x = 'the meaning\nof life'
re.sub("([,\w])\n(\w)", "\1 \2", x)
'the meanin\x01 \x02f life'
我想返回the meaning of life
。我究竟做錯了什麼?
我想刪除包裝到一定寬度的文本的行返回。例如刪除包裝行返回
import re
x = 'the meaning\nof life'
re.sub("([,\w])\n(\w)", "\1 \2", x)
'the meanin\x01 \x02f life'
我想返回the meaning of life
。我究竟做錯了什麼?
你需要逃脫\
這樣的:
>>> import re
>>> x = 'the meaning\nof life'
>>> re.sub("([,\w])\n(\w)", "\1 \2", x)
'the meanin\x01 \x02f life'
>>> re.sub("([,\w])\n(\w)", "\\1 \\2", x)
'the meaning of life'
>>> re.sub("([,\w])\n(\w)", r"\1 \2", x)
'the meaning of life'
>>>
如果你不逃避它,輸出的是\1
,所以:
>>> '\1'
'\x01'
>>>
這就是爲什麼我們需要使用'\\\\'
或r'\\'
到在Python RegEx中顯示信號\
。
然而有關,從this answer:
如果你把這個字符串中的一個程序中,你實際上可能需要使用四個反斜槓(因爲字符串解析器會刪除他們兩個的時候「去除「它爲字符串,然後正則表達式需要兩個逃脫正則表達式反斜槓)。
而且the document:
如前所述,正則表達式用反斜槓字符(
'\'
)來表示特殊格式或允許在不調用它們的特殊含義使用特殊字符。這與Python在字符串文字中用於相同目的的相同字符的使用相沖突。假設你想寫一個匹配字符串
\section
的RE,它可能在LaTeX文件中找到。要弄清楚在程序代碼中寫什麼,從所需的字符串開始匹配。接下來,您必須通過在反斜槓前加上反斜槓和其他元字符來避開任何反斜槓,從而產生字符串\\section
。必須傳遞給re.compile()
的結果字符串必須是\\section
。但是,要將其表示爲Python字符串文字,則必須再次轉義兩個反斜槓。
另一種方式爲brittenb建議,你不需要正則表達式在這種情況下:
>>> x = 'the meaning\nof life'
>>> x.replace("\n", " ")
'the meaning of life'
>>>
使用原始字符串字面量; Python字符串文字語法和正則表達式解釋反斜槓; \1
在Python字符串字面解釋爲一個八進制轉義,而不是在原始字符串字面量:
re.sub(r"([,\w])\n(\w)", r"\1 \2", x)
另一種方法是,使他們達到正則表達式引擎這樣加倍所有反斜槓。
查看Python正則表達式HOWTO的Backslash plague section。
演示:
>>> import re
>>> x = 'the meaning\nof life'
>>> re.sub(r"([,\w])\n(\w)", r"\1 \2", x)
'the meaning of life'
可能更容易只是對新行分割;使用str.splitlines()
method,然後使用str.join()
空間重新加入:
' '.join(ex.splitlines())
但無可否認這不會的單詞和額外的新行之間的其他地方換行區分。
或使用原始字符串文字。 –
@MartijnPieters:好的,編輯過。 –
您也可以跳過're'的導入並使用'x.replace(「\ n」,「」)''。 – brittenb