Python 正規表示式
match() vs search()
- match():只檢查字串
起始位置
是否符合。 - search():檢查字串
任何位置
是否符合。# example 1 pattern = re.compile('me') pattern.match('Bob is me.') # no match pattern.search('Bob is me.') # match # example 2 pattern = re.compile('Bob') pattern.match('Bob is me.') # match pattern.search('Bob is me.') # match
特殊符號
.
:表示任何一字元,除了換行符號\n
。
re.search('me.$', 'Bob is me~') # match
^
:檢查是否符合目標字串起始位置
。
re.search('^Bob', 'Bob is me.') # match
re.search('^is', 'Bob is me.') # no match
$
:檢查是否符合目標字串結尾位置
。
re.search('me.$', 'Bob is me.') # match
re.search('is$', 'Bob is me.') # no match
*
:表示*
前方的pat
出現 0 次或多次。
re.search('ab*', 'a') # match
re.search('ab*', 'abbb') # match
+
:表示+
前方的pat
出現 1 次或多次。
re.search('ab+', 'a') # no match
re.search('ab+', 'abbb') # match
?
:表示?
前方的pat
出現 0 次或 1 次。
re.match('ab?', 'a') # match
re.match('ab?', 'ab') # match
*?
, +?
, ??
:在*+?
之後加上?
,可以讓 match 結果最小化。
re.match('<.*>', '<a> b <c>')
# result = <span=(0, 9), match='<a> b <c>'>
re.match('<.*?>', '<a> b <c>')
# result = <span=(0, 3), match='<a>'>
{m}
:表示{m}
前方的pat
只能出現 m 次。
re.match('a{3}', 'aaa') # match
re.match('a{3}', 'aa') # no match
{m,n}
:表示{m,n}
前方的pat
能出現 m~n 次。
re.match('a{2,3}b', 'aab') # match
re.match('a{2,3}b', 'aaaab') # no match
{m,}
:表示{m,}
前方的pat
至少要出現 m 次。
re.match('a{2,}b', 'aaab') # match
re.match('a{2,}b', 'ab') # no match
\
:跳脫字元,讓前面提到的$*
當作一般字元使用。
re.match('\*+', '**') # match
re.match('*+', '**') # error
[]
:表示某些字元的集合。
[abc]
:表示 a 或 b 或 c。[a-z]
:表示所有小寫字母。[0-5][0-9]
:表示 00 到 59。[0-9A-Za-z]
:表示所有大小寫字母和數字。[+?]
:在集合中的特殊符號為一般字元,此範例表示+
或?
。[^A-Z]
:集合的開頭字元為^
,表示非屬於的集合,此範例表示非大寫字母都符合。
|
:當有多個pat
使用|
隔開,表示或的意思,會由左而右開始檢查,只要符合pat
就會停止。
# the result of two examples are matching
re.match('[^A]|[^B]', 'B') # [^A] match。
re.match('[^B]|[^A]', 'B') # [^B] no match, but [^A] match。