2017-06-14 59 views
0

我知道'r'前綴表示一個原始字符串,因此爲什麼在下面的示例中使用'r'前綴,因爲有特殊的正則表達式字符在字符串中,這不應該從字面上?在標記文本中使用findall方法和前綴'r'

正在搜索的'字符串'是一個nltk文本對象,我想它與此有關?但是我不明白它是如何影響findall的使用的。

moby.findall(r"<a> (<.*>) <man>") 

回答

3

在此特定情況下,r都沒有區別,因爲這串不含有可能被誤解的任何序列。但是,在編寫正則表達式時使用r是個好習慣,以避免誤解\n\t等序列;與r,他們字面上處理,作爲兩個字符 - 反斜槓後面跟一個字母;沒有r,他們分別評估換行和標籤。

+0

哦,這已無關,與那些在正則表達式的特殊含義的字符 - 這些都需要在正則表達式的轉義使用反斜槓(如*,+等):'\ *'從字面上治療,但'r'對他們沒有影響。 –

1

字符串前面的r稱爲印記。

例如,'\ n'將被視爲換行符,而r'\ n'將被視爲字符\,後跟n。

要不是你的正則表達式:

moby.findall(r"<a> (<.*>) <man>") 

它不會有所作爲,但它始終是把正則表達式的原始字符串,以避免逃避反斜槓一個好主意。