# Predefined Data Types in `parse`

https://pypi.python.org/pypi/behave uses the https://pypi.python.org/pypi/parse module (inverse of Python string.format) under the hoods to parse parameters in step definitions. This leads to rather simple and readable parse expressions for step parameters.

    # -- FILE: features/steps/type_transform_example_steps.py
    from behave import given

    @given('I have {number:d} friends')  #< Convert 'number' into int type.
    def step_given_i_have_number_friends(context, number):
        assert number > 0
        ...

Therefore, the following `parse types` are already supported in step definitions without registration of any user-defined type:

Type | Characters Matched | Output Type
--- | --- | ---
w | Letters and underscore | str
W | Non-letter and underscore | str
s | Whitespace | str
S | Non-whitespace | str
d | Digits (effectively integer numbers) | int
D | Non-digit | str
n | Numbers with thousands separators (, or .) | int
% | Percentage (converted to value/100.0) | float
f | Fixed-point numbers | float
e | Floating-point numbers with exponent e.g. 1.1e-10, NAN (all case insensitive) | float
g | General number format (either d, f or e) | float
b | Binary numbers | int
o | Octal numbers | int
x | Hexadecimal numbers (lower and upper case) | int
ti | ISO 8601 format date/time e.g. 1972-01-20T10:21:36Z | datetime
te | RFC2822 e-mail format date/time e.g. Mon, 20 Jan 1972 10:21:36 +1000 | datetime
tg | Global (day/month) format date/time e.g. 20/1/1972 10:21:36 AM +1:00 | datetime
ta | US (month/day) format date/time e.g. 1/20/1972 10:21:36 PM +10:30 | datetime
tc | ctime() format date/time e.g. Sun Sep 16 01:03:52 1973 | datetime
th | HTTP log format date/time e.g. 21/Nov/2011:00:07:11 +0000 | datetime
tt | Time e.g. 10:21:36 PM -5:30 | time