Parse Expressions¶
Parse expressions are a simplified form of regular expressions. The actual regular expression is hidden behind the type name / hint.
Parse expressions are used in step definitions as a simplified alternative to regular expressions. They are used for parameters and type conversions (which are not supported for regular expression patterns).
# -- FILE: features/steps/example_steps.py
from behave import when
@when('we implement {number:d} tests')
def step_impl(context, number): # -- NOTE: number is converted into integer
assert number > 1 or number == 0
context.tests_count = number
The following tables provide a overview of the parse expressions syntax. See also Python regular expressions description in the Python re module.
Type |
Characters Matched |
Output |
---|---|---|
l |
Letters (ASCII) |
str |
w |
Letters, numbers and underscore |
str |
W |
Not letters, numbers 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 |
F |
Decimal numbers |
Decimal |
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 (“T” and “Z” optional) |
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 |
ts |
Linux system log format date/time e.g. Nov 9 03:37:44 |
datetime |
tt |
Time e.g. 10:21:36 PM -5:30 |
time |
If parse_type module is used, the cardinality of a type can be specified, too (by using the CardinalityField support):
Cardinality |
Description |
---|---|
|
Pattern with cardinality 0..1: optional part (question mark). |
|
Pattern with cardinality zero or more, 0.. (asterisk). |
|
Pattern with cardinality one or more, 1.. (plus sign). |