MatchesXsDuration🔗
Check that
text conforms to the pattern of an xs:duration.
Code
duration_rep = (
r"-?P((([0-9]+Y([0-9]+M)?([0-9]+D)?"
r"|([0-9]+M)([0-9]+D)?"
r"|([0-9]+D)"
r")"
r"(T(([0-9]+H)([0-9]+M)?([0-9]+(\.[0-9]+)?S)?"
r"|([0-9]+M)([0-9]+(\.[0-9]+)?S)?"
r"|([0-9]+(\.[0-9]+)?S)"
r")"
r")?"
r")"
r"|(T(([0-9]+H)([0-9]+M)?([0-9]+(\.[0-9]+)?S)?"
r"|([0-9]+M)([0-9]+(\.[0-9]+)?S)?"
r"|([0-9]+(\.[0-9]+)?S)"
r")"
r")"
r")"
)
# fmt: on
pattern = f"^{duration_rep}$"
return match(pattern, text) is not None