>>> match = re.search(r'\d', 'ca\d')
>>> type(match)
<type 'NoneType'>
從我的理解'r'表示不要用黑色邊線做任何特殊處理,只返回原始字符串。爲什麼這個python regex返回不匹配?
而且,爲什麼我得到下面的輸出:
>>> match = re.search(r'\a', 'ca\a')
>>> match.group()
'\x07'
>>> match = re.search(r'\d', 'ca\d')
>>> type(match)
<type 'NoneType'>
從我的理解'r'表示不要用黑色邊線做任何特殊處理,只返回原始字符串。爲什麼這個python regex返回不匹配?
而且,爲什麼我得到下面的輸出:
>>> match = re.search(r'\a', 'ca\a')
>>> match.group()
'\x07'
因爲你的輸入字符串沒有數字。 \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
,沒有這樣的正則表達式元字符,所以\
被視爲文字。
除了stribizhev的評論,可能'r'(原始字符串指標)讓你感到困惑。這用於避免轉義。轉義是一種允許在代碼編寫特殊(不可打印)字符等形式: TAB - ASCII 9 - 「\ t」 的 CR - ASCII 13 - 爲 「\ r」(Unix的回車)
但有沒有特殊字符代碼爲「\ d」,所以在它前面放置一個r沒有區別,所以字符串仍然是「\ d」(2個字符),在正則表達式中,匹配一個數字。