I was trying to match all numbers in a string, this is an example code:
re.search(r'[0-9]*', '(123)').group() # outputs: ''
re.search(r'[0-9]*', '123)').group() # outputs: '123'
re.search(r'[0-9] ', '(123)').group() # outputs: '123'
Why is this strange behavior happening here?
CodePudding user response:
In your case re.search
will stop on first match.
re.search(r'[0-9]*', '(123)').group()
- will search for digits starting from empty string to infinity long string, and since first char is (
, it marches empty string.
re.search(r'[0-9]*', '123)').group()
- since first char is digit, it will try to get longest match.
re.search(r'[0-9] ', '(123)').group()
- will search for digits starting from at least one char string to infinity long string, and since first char is (
, it will skip (
and will start from first digit and will try to get longest match.
*
is {0,}
and
is {1,}
this is great resource to play with regex https://regex101.com/