3 ms·
IMHO the whole `re.match` is a design flaw in stdlib. re.match() should always return a match object, but instead .group(1) will return None. Then we can write
by est 7y ago
IMHO the whole `re.match` is a design flaw in stdlib.
re.match() should always return a match object, but instead .group(1) will return None. Then we can write one-liners easier without the walrus operator.
- nine_k 7y agoSometimes you just check for a match (e.g.of entire string) and define no groups. The problem is not in re.match but in None being a relatively poor Maybe / Optional (still ways better than C-style `null` of many other languages).
- est 7y ago> Sometimes you just check for a match re.match vs re.search
- deleted 7y ago[deleted]
- Liquid_Fire 7y agore.search is different. re.match matches from the beginning of the string, while re.search matches from anywhere in the string.
- geofft 7y agoCould just have been if re.match(...).matched: But yeah, agree that Optional is what I want here. if let Some(m) := re.match(...) m.group(1)... m = re.match(...) m.group(1) # TypeError because I haven't unwrapped the Optional In current Python, that last line sometimes throws a runtime error.
- eesmith 7y agoI think you mean .group(0) as .group(1) can already return None: >>> import re >>> pat = re.compile("(A+)|(B+)") >>> m = pat.search("HUBBLE") >>> m.group(1) is None True >>> m.group(2) 'BB' >>> m.group(0) 'BB' I don't see how using your proposed change would help.
- est 7y agoI mean re.search() should always return a MatchObject, dont return None.