regex - What is the difference between Python's re.search and re.match? -
what difference between search()
, match()
functions in python re
module?
i've read documentation (current documentation), never seem remember it. keep having , re-learn it. i'm hoping answer examples (perhaps) stick in head. or @ least i'll have better place return question , take less time re-learn it.
re.match
anchored @ beginning of string. has nothing newlines, not same using ^
in pattern.
as re.match documentation says:
if 0 or more characters @ beginning of string match regular expression pattern, return corresponding
matchobject
instance. returnnone
if string not match pattern; note different zero-length match.note: if want locate match anywhere in string, use
search()
instead.
re.search
searches entire string, the documentation says:
scan through string looking location regular expression pattern produces match, , return corresponding
matchobject
instance. returnnone
if no position in string matches pattern; note different finding zero-length match @ point in string.
so if need match @ beginning of string, or match entire string use match
. faster. otherwise use search
.
the documentation has specific section match
vs. search
covers multiline strings:
python offers 2 different primitive operations based on regular expressions:
match
checks match only @ beginning of string, whilesearch
checks match anywhere in string (this perl default).note
match
may differsearch
when using regular expression beginning'^'
:'^'
matches @ start of string, or inmultiline
mode following newline. “match
” operation succeeds only if pattern matches @ start of string regardless of mode, or @ starting position given optionalpos
argument regardless of whether newline precedes it.
now, enough talk. time see example code:
# example code: string_with_newlines = """something someotherthing""" import re print re.match('some', string_with_newlines) # matches print re.match('someother', string_with_newlines) # won't match print re.match('^someother', string_with_newlines, re.multiline) # won't match print re.search('someother', string_with_newlines) # finds print re.search('^someother', string_with_newlines, re.multiline) # finds m = re.compile('thing$', re.multiline) print m.match(string_with_newlines) # no match print m.match(string_with_newlines, pos=4) # matches print m.search(string_with_newlines, re.multiline) # matches
Comments
Post a Comment