你似乎很困惑。
「字符串文字」是您鍵入到程序中的字符串。因爲你的字符串需要有一個清晰的開始和結束,所以某些字符在字符串中間變得不方便,並且必須使用轉義序列來表示它們。
Python提供了'原始'字符串文字,它們對於轉義序列的解釋有着不同的規則:相同的規則用於確定字符串結尾的位置(所以一個反斜槓,後面跟着開頭引號字符, t終止字符串),但是然後反斜槓之間的東西不會被轉換。因此,雖然'\''
是一個由單引號字符組成的字符串(中間的\'
是生成引號的轉義序列),但r'\''
是一個由反斜槓和引號字符組成的字符串。
原始字符串文字生成str
類型的對象。它與普通的字符串文字相同。這些通常用於模式的正則表達式操作,因爲用於正則表達式的字符串通常需要包含大量反斜槓。如果你想編寫一個匹配源文本中反斜槓的正則表達式,並且你沒有原始字符串文字,那麼你需要在源代碼中引用四個反斜槓:Python編譯器會將其解釋爲包含兩個真正反斜槓的字符串,這反過來在正則表達式語法中表示「匹配反斜槓」。
您發現的功能是將轉義序列重新引入輸入文本的不完美嘗試。 這不是你想做什麼,甚至沒有意義,也不符合作者自己的規範。這似乎是基於類似於你自己的一種誤解。 「原始等價」字符串的概念是無意義的。真的,沒有這樣的東西,「原始字符串」;原始字符串文字是創建普通字符串的一種方便。
您想搜索htmlSource
中的模式。它已經在你需要它的形式在。您的問題有與字符串轉義無關。 當字符串來自用戶輸入,文件輸入或基本上除程序源以外的任何其他字符串時,它不會像字符串文字一樣處理,除非您明確地安排這種情況發生。如果網頁中包含反斜槓,後跟n,則在urllib
處讀取的字符串在相應位置中包含 - 反斜槓,後跟n,而不是換行符。
問題如下:你想要搜索這個字符串,就像你說的:「當我搜索它的字符串的時候」。您目前是匹配的字符串。請參閱文檔:
Help on function match in module re:
match(pattern, string, flags=0)
Try to apply the pattern at the start of the string, returning
a match object, or None if no match was found.
你的模式不會出現在字符串的開頭,因爲該網頁的HTML不與<a>
標籤您正在尋找的開始。您需要m=re.search(r"<a href.*?pdf[^>]*?", htmlSource)
。
你使用正則表達式而不是[真正的HTML解析器](http://www.crummy.com/software/BeautifulSoup/)的任何原因? –
這部分的內容也只是我在正則表達式中的一個練習 – randomafk
這個問題並不是真的關於「Python原始文字」,是嗎? – Johnsyweb