我知道'r'前綴表示一個原始字符串,因此爲什麼在下面的示例中使用'r'前綴,因爲有特殊的正則表達式字符在字符串中,這不應該從字面上?在標記文本中使用findall方法和前綴'r'
正在搜索的'字符串'是一個nltk文本對象,我想它與此有關?但是我不明白它是如何影響findall的使用的。
moby.findall(r"<a> (<.*>) <man>")
我知道'r'前綴表示一個原始字符串,因此爲什麼在下面的示例中使用'r'前綴,因爲有特殊的正則表達式字符在字符串中,這不應該從字面上?在標記文本中使用findall方法和前綴'r'
正在搜索的'字符串'是一個nltk文本對象,我想它與此有關?但是我不明白它是如何影響findall的使用的。
moby.findall(r"<a> (<.*>) <man>")
在此特定情況下,r
都沒有區別,因爲這串不含有可能被誤解的任何序列。但是,在編寫正則表達式時使用r
是個好習慣,以避免誤解\n
或\t
等序列;與r
,他們字面上處理,作爲兩個字符 - 反斜槓後面跟一個字母;沒有r
,他們分別評估換行和標籤。
字符串前面的r
稱爲印記。
例如,'\ n'將被視爲換行符,而r'\ n'將被視爲字符\,後跟n。
要不是你的正則表達式:
moby.findall(r"<a> (<.*>) <man>")
它不會有所作爲,但它始終是把正則表達式的原始字符串,以避免逃避反斜槓一個好主意。
哦,這已無關,與那些在正則表達式的特殊含義的字符 - 這些都需要在正則表達式的轉義使用反斜槓(如*,+等):'\ *'從字面上治療,但'r'對他們沒有影響。 –