昨天介紹了使用Pytnon的正規表示式模組re.
今天繼續探討.
In [1]: import re
In [2]: re.search("[0123456789]", "6") != None
Out[2]: True
因為"6"是數字.所以符合.
錨點 ^ 代表開頭
In [3]: re.search("^[0123456789]", "12") != None
Out[3]: True
In [4]: re.search("^[0123456789]", "1x") != None
Out[4]: True
錨點 $ 代表結尾
In [5]: re.search("[0123456789]$", "56") != None
Out[5]: True
因為"56"的結尾是6,數字符合.
In [6]: re.search("[0123456789]$", "1x") != None
Out[6]: False
因為"1x"的結尾是x,不符合.
In [7]: re.search("[0123456789]$", "x1") != None
Out[7]: True
因為"1x"的結尾是1,符合.
那把錨點^$結合呢?
In [8]: re.search("^[0123456789]$", "4") != None
Out[8]: True
In [9]: re.search("^[0123456789]$", "45") != None
Out[9]: False
為何4符合,而45卻不符合呢?
這是很容易令人疑惑的地方!
實際上我們的pattern [01234567890] 代表的是列舉,
去符合字串! 所以 ^$ 結合,限制條件就變很嚴格了.
先來看以下的例子.
In [10]: re.search("^[456][567]$", "45") != None
Out[10]: True
這個意義就是開頭是4或5或6, 結尾是5或6或7,而且是兩個字元的.
回到上面的 re.search("^[0123456789]$", "45") != None
代表的意義是數字,既要當頭,也要當尾,那就只有一個的情況下才能相符.
所以"45"不符.
In [11]: re.search("^[456][567]$", "475") != None
Out[11]: False
雖然4開頭,5結尾,但是數字的數量不對,7找不到匹配的pattern,
不符合.
實務上,我們會用 [0-9]方式代表數字.
In [12]: re.search("^[0-9][0-9]$", "45") != None
Out[12]: True
這樣就符合了. 表示方式也較為清晰.