Match on empty string
Opened this issue · 2 comments
SeanHayes commented
I'm trying to match urls with the following pattern:
'/{url1}'
which matches '/foo'
but not '/',
even though '/{url1}'.format(url1='')
would equal '/'
.
Could this be a configurable option?
elchupanebrej commented
+1
jenisys commented
HINT:
That is basically the case of an optional<T>
item (or by using choice(s)).
You can already solve that yourself by using user-defined types (or: by using parse_type
).
SEE ALSO:
OR: Use cardinality field support, like:
# -- USE CASE: Parser with CardinalityField support.
# NOTE: Automatically adds missing type variants with CardinalityField part.
from parse_type.cfparse import Parser # DROP-IN REPLACEMENT: Parser w/ CardinalityField support
from parse import with_pattern
@with_pattern(r"\d+")
def parse_number(text):
return int(text)
# -- PREPARE: parser, adds missing type variant for cardinality 0..1 (optional) and other cardinalities.
type_dict = dict(Number=parse_number)
parser = Parser("OptionalNumber: {number:Number?}", type_dict)
# -- USE: parser.
result1 = parser.parse("OptionalNumber: 42")
assert result1["number"] == 42
result2 = parser.parse("OptionalNumber: ")
assert result1["number"] == None