2015-04-15 31 views
2
>>> match = re.search(r'\d', 'ca\d') 
>>> type(match) 
<type 'NoneType'> 

從我的理解'r'表示不要用黑色邊線做任何特殊處理,只返回原始字符串。爲什麼這個python regex返回不匹配?

而且,爲什麼我得到下面的輸出:

>>> match = re.search(r'\a', 'ca\a') 
>>> match.group() 
'\x07' 

回答

4

因爲你的輸入字符串沒有數字。 \d表示capture a digit

如果你想捕捉一個文字\d,你應該使用\\d模式。

參見example here

這個程序

import re 
p = re.compile(ur'\\d') 
test_str = u"ca\d" 
print re.search(p, test_str).group(0) 

將輸出\d

至於r'',請檢查該re documentation

的解決方案是使用Python的raw字符串表示正則表達式 模式;在 中,不以任何特殊方式處理反斜槓,字符串文字前綴爲'r'。因此r「\ n」是包含'\'和'n'的雙字符字符串 ,而「\ n」是包含換行符的單字符字符串 。通常模式將使用這種原始字符串表示法以Python 代碼表示。

這並不意味着它不會處理斜線無論如何,這只是讓您使用一個斜線而不是一個雙斜線。正則表達式中的斜槓在d之前有意義。

而至於\a,沒有這樣的正則表達式元字符,所以\被視爲文字。

1

除了stribizhev的評論,可能'r'(原始字符串指標)讓你感到困惑。這用於避免轉義。轉義是一種允許在代碼編寫特殊(不可打印)字符等形式: TAB - ASCII 9 - 「\ t」 的 CR - ASCII 13 - 爲 「\ r」(Unix的回車)

但有沒有特殊字符代碼爲「\ d」,所以在它前面放置一個r沒有區別,所以字符串仍然是「\ d」(2個字符),在正則表達式中,匹配一個數字。

相關問題