它是 - ! '!' \(33 = ORD()到92個字符= ORD( '\') 和和一組 '&'對於正則表達式,r'[! - 。&]'是什麼意思?
我覺得我的解釋是不正確 ''?根據我的測試。
但是Python參考不說什麼錯我的解釋。 http://docs.python.org/library/re.html
它是 - ! '!' \(33 = ORD()到92個字符= ORD( '\') 和和一組 '&'對於正則表達式,r'[! - 。&]'是什麼意思?
我覺得我的解釋是不正確 ''?根據我的測試。
但是Python參考不說什麼錯我的解釋。 http://docs.python.org/library/re.html
總之,r'[!-\.&]'
是寫r'[!-.]'
的只是一個複雜的形式。
它的所有通道匹配與ord
33 = ord('!')
和46 = ord('.')
之間,aracters即下列任何一項:
!"#$%&\'()*+,-.
.
之前逸出反斜線字符類中被忽略;這是不必要的(.
匹配一個字符類中的所有字符都沒有任何意義)。由於和號&
已經在字符類中,所以也是多餘的。
反斜槓轉義點,範圍因此將從!
到.
。正則表達式匹配:
!"#$%&'()*+,-.
因爲它包含的範圍,逃避點是不需要的最後&
是沒有必要要麼因爲它是一個字符類中。
似乎這個正則表達式的意圖是匹配任何字符之間的「!」和「。」 (請注意,斜槓正在轉義「。」字符),它們是! " # $ % & ' () * + , -
。 (來自Unicode表格http://www.tamasoft.co.jp/en/general-info/unicode.html)。關於表達
兩點意見:
[]
(除了,也許,由\
本身)。&
」已包含在由「!-.
」定義的範圍內,因此它是多餘的。1)還有其他字符需要轉義,例如:' - [] ^',具體取決於你放置的位置。2)我認爲字符類可能只匹配'! - 。&',即:'-'不是用來表示一個範圍,而是連字符本身。 – NullUserException
測試可能表明該模式匹配chr(33)
到chr(46)
,但該模式不能保證在所有系統上以這種方式工作。這是爲什麼。字符集因系統而異。
這就是爲什麼Perl正則表達式文檔特別建議「僅使用從等號([a-e]
,[A-E]
)或數字([0-9]
)的字母開始和結束的範圍。 「(Perl正則表達式是相關的,因爲這是Python使用的正則表達式)。
因此,如果這種模式曾經在基於EBCDIC的平臺上運行,它將匹配一組不同的字符。在基於ASCII的平臺上說模式匹配chr(33)
到chr(46)
是正確的。
您的警告是否適用於UTF-8/16? – eugene
@Eugene:在任何*多字節編碼中使用任何*正則表達式編碼的字節是非常危險的。首先將它們解碼爲unicode。 –
你可以測試它.. –