Skip to main content

Alternative regular expression module, to replace re.

Project description

Introduction

This regex implementation is backwards-compatible with the standard ‘re’ module, but offers additional functionality.

Python 2

Python 2 is no longer supported. The last release that supported Python 2 was 2021.11.10.

PyPy

This module is targeted at CPython. It expects that all codepoints are the same width, so it won’t behave properly with PyPy outside U+0000..U+007F because PyPy stores strings as UTF-8.

Multithreading

The regex module releases the GIL during matching on instances of the built-in (immutable) string classes, enabling other Python threads to run concurrently. It is also possible to force the regex module to release the GIL during matching by calling the matching methods with the keyword argument concurrent=True. The behaviour is undefined if the string changes during matching, so use it only when it is guaranteed that that won’t happen.

Unicode

This module supports Unicode 15.1.0. Full Unicode case-folding is supported.

Flags

There are 2 kinds of flag: scoped and global. Scoped flags can apply to only part of a pattern and can be turned on or off; global flags apply to the entire pattern and can only be turned on.

The scoped flags are: ASCII (?a), FULLCASE (?f), IGNORECASE (?i), LOCALE (?L), MULTILINE (?m), DOTALL (?s), UNICODE (?u), VERBOSE (?x), WORD (?w).

The global flags are: BESTMATCH (?b), ENHANCEMATCH (?e), POSIX (?p), REVERSE (?r), VERSION0 (?V0), VERSION1 (?V1).

If neither the ASCII, LOCALE nor UNICODE flag is specified, it will default to UNICODE if the regex pattern is a Unicode string and ASCII if it’s a bytestring.

The ENHANCEMATCH flag makes fuzzy matching attempt to improve the fit of the next match that it finds.

The BESTMATCH flag makes fuzzy matching search for the best match instead of the next match.

Old vs new behaviour

In order to be compatible with the re module, this module has 2 behaviours:

  • Version 0 behaviour (old behaviour, compatible with the re module):

    Please note that the re module’s behaviour may change over time, and I’ll endeavour to match that behaviour in version 0.

    • Indicated by the VERSION0 flag.

    • Zero-width matches are not handled correctly in the re module before Python 3.7. The behaviour in those earlier versions is:

      • .split won’t split a string at a zero-width match.

      • .sub will advance by one character after a zero-width match.

    • Inline flags apply to the entire pattern, and they can’t be turned off.

    • Only simple sets are supported.

    • Case-insensitive matches in Unicode use simple case-folding by default.

  • Version 1 behaviour (new behaviour, possibly different from the re module):

    • Indicated by the VERSION1 flag.

    • Zero-width matches are handled correctly.

    • Inline flags apply to the end of the group or pattern, and they can be turned off.

    • Nested sets and set operations are supported.

    • Case-insensitive matches in Unicode use full case-folding by default.

If no version is specified, the regex module will default to regex.DEFAULT_VERSION.

Case-insensitive matches in Unicode

The regex module supports both simple and full case-folding for case-insensitive matches in Unicode. Use of full case-folding can be turned on using the FULLCASE flag. Please note that this flag affects how the IGNORECASE flag works; the FULLCASE flag itself does not turn on case-insensitive matching.

Version 0 behaviour: the flag is off by default.

Version 1 behaviour: the flag is on by default.

Nested sets and set operations

It’s not possible to support both simple sets, as used in the re module, and nested sets at the same time because of a difference in the meaning of an unescaped "[" in a set.

For example, the pattern [[a-z]--[aeiou]] is treated in the version 0 behaviour (simple sets, compatible with the re module) as:

  • Set containing “[” and the letters “a” to “z”

  • Literal “–”

  • Set containing letters “a”, “e”, “i”, “o”, “u”

  • Literal “]”

but in the version 1 behaviour (nested sets, enhanced behaviour) as:

  • Set which is:

    • Set containing the letters “a” to “z”

  • but excluding:

    • Set containing the letters “a”, “e”, “i”, “o”, “u”

Version 0 behaviour: only simple sets are supported.

Version 1 behaviour: nested sets and set operations are supported.

Notes on named groups

All groups have a group number, starting from 1.

Groups with the same group name will have the same group number, and groups with a different group name will have a different group number.

The same name can be used by more than one group, with later captures ‘overwriting’ earlier captures. All the captures of the group will be available from the captures method of the match object.

Group numbers will be reused across different branches of a branch reset, eg. (?|(first)|(second)) has only group 1. If groups have different group names then they will, of course, have different group numbers, eg. (?|(?P<foo>first)|(?P<bar>second)) has group 1 (“foo”) and group 2 (“bar”).

In the regex (\s+)(?|(?P<foo>[A-Z]+)|(\w+) (?P<foo>[0-9]+) there are 2 groups:

  • (\s+) is group 1.

  • (?P<foo>[A-Z]+) is group 2, also called “foo”.

  • (\w+) is group 2 because of the branch reset.

  • (?P<foo>[0-9]+) is group 2 because it’s called “foo”.

If you want to prevent (\w+) from being group 2, you need to name it (different name, different group number).

Additional features

The issue numbers relate to the Python bug tracker, except where listed otherwise.

Added \p{Horiz_Space} and \p{Vert_Space} (GitHub issue 477)

\p{Horiz_Space} or \p{H} matches horizontal whitespace and \p{Vert_Space} or \p{V} matches vertical whitespace.

Added support for lookaround in conditional pattern (Hg issue 163)

The test of a conditional pattern can be a lookaround.

>>> regex.match(r'(?(?=\d)\d+|\w+)', '123abc')
<regex.Match object; span=(0, 3), match='123'>
>>> regex.match(r'(?(?=\d)\d+|\w+)', 'abc123')
<regex.Match object; span=(0, 6), match='abc123'>

This is not quite the same as putting a lookaround in the first branch of a pair of alternatives.

>>> print(regex.match(r'(?:(?=\d)\d+\b|\w+)', '123abc'))
<regex.Match object; span=(0, 6), match='123abc'>
>>> print(regex.match(r'(?(?=\d)\d+\b|\w+)', '123abc'))
None

In the first example, the lookaround matched, but the remainder of the first branch failed to match, and so the second branch was attempted, whereas in the second example, the lookaround matched, and the first branch failed to match, but the second branch was not attempted.

Added POSIX matching (leftmost longest) (Hg issue 150)

The POSIX standard for regex is to return the leftmost longest match. This can be turned on using the POSIX flag.

>>> # Normal matching.
>>> regex.search(r'Mr|Mrs', 'Mrs')
<regex.Match object; span=(0, 2), match='Mr'>
>>> regex.search(r'one(self)?(selfsufficient)?', 'oneselfsufficient')
<regex.Match object; span=(0, 7), match='oneself'>
>>> # POSIX matching.
>>> regex.search(r'(?p)Mr|Mrs', 'Mrs')
<regex.Match object; span=(0, 3), match='Mrs'>
>>> regex.search(r'(?p)one(self)?(selfsufficient)?', 'oneselfsufficient')
<regex.Match object; span=(0, 17), match='oneselfsufficient'>

Note that it will take longer to find matches because when it finds a match at a certain position, it won’t return that immediately, but will keep looking to see if there’s another longer match there.

Added (?(DEFINE)...) (Hg issue 152)

If there’s no group called “DEFINE”, then … will be ignored except that any groups defined within it can be called and that the normal rules for numbering groups still apply.

>>> regex.search(r'(?(DEFINE)(?P<quant>\d+)(?P<item>\w+))(?&quant) (?&item)', '5 elephants')
<regex.Match object; span=(0, 11), match='5 elephants'>

Added (*PRUNE), (*SKIP) and (*FAIL) (Hg issue 153)

(*PRUNE) discards the backtracking info up to that point. When used in an atomic group or a lookaround, it won’t affect the enclosing pattern.

(*SKIP) is similar to (*PRUNE), except that it also sets where in the text the next attempt to match will start. When used in an atomic group or a lookaround, it won’t affect the enclosing pattern.

(*FAIL) causes immediate backtracking. (*F) is a permitted abbreviation.

Added \K (Hg issue 151)

Keeps the part of the entire match after the position where \K occurred; the part before it is discarded.

It does not affect what groups return.

>>> m = regex.search(r'(\w\w\K\w\w\w)', 'abcdef')
>>> m[0]
'cde'
>>> m[1]
'abcde'
>>>
>>> m = regex.search(r'(?r)(\w\w\K\w\w\w)', 'abcdef')
>>> m[0]
'bc'
>>> m[1]
'bcdef'

Added capture subscripting for expandf and subf/subfn (Hg issue 133)

You can use subscripting to get the captures of a repeated group.

>>> m = regex.match(r"(\w)+", "abc")
>>> m.expandf("{1}")
'c'
>>> m.expandf("{1[0]} {1[1]} {1[2]}")
'a b c'
>>> m.expandf("{1[-1]} {1[-2]} {1[-3]}")
'c b a'
>>>
>>> m = regex.match(r"(?P<letter>\w)+", "abc")
>>> m.expandf("{letter}")
'c'
>>> m.expandf("{letter[0]} {letter[1]} {letter[2]}")
'a b c'
>>> m.expandf("{letter[-1]} {letter[-2]} {letter[-3]}")
'c b a'

Added support for referring to a group by number using (?P=...)

This is in addition to the existing \g<...>.

Fixed the handling of locale-sensitive regexes

The LOCALE flag is intended for legacy code and has limited support. You’re still recommended to use Unicode instead.

Added partial matches (Hg issue 102)

A partial match is one that matches up to the end of string, but that string has been truncated and you want to know whether a complete match could be possible if the string had not been truncated.

Partial matches are supported by match, search, fullmatch and finditer with the partial keyword argument.

Match objects have a partial attribute, which is True if it’s a partial match.

For example, if you wanted a user to enter a 4-digit number and check it character by character as it was being entered:

>>> pattern = regex.compile(r'\d{4}')

>>> # Initially, nothing has been entered:
>>> print(pattern.fullmatch('', partial=True))
<regex.Match object; span=(0, 0), match='', partial=True>

>>> # An empty string is OK, but it's only a partial match.
>>> # The user enters a letter:
>>> print(pattern.fullmatch('a', partial=True))
None
>>> # It'll never match.

>>> # The user deletes that and enters a digit:
>>> print(pattern.fullmatch('1', partial=True))
<regex.Match object; span=(0, 1), match='1', partial=True>
>>> # It matches this far, but it's only a partial match.

>>> # The user enters 2 more digits:
>>> print(pattern.fullmatch('123', partial=True))
<regex.Match object; span=(0, 3), match='123', partial=True>
>>> # It matches this far, but it's only a partial match.

>>> # The user enters another digit:
>>> print(pattern.fullmatch('1234', partial=True))
<regex.Match object; span=(0, 4), match='1234'>
>>> # It's a complete match.

>>> # If the user enters another digit:
>>> print(pattern.fullmatch('12345', partial=True))
None
>>> # It's no longer a match.

>>> # This is a partial match:
>>> pattern.match('123', partial=True).partial
True

>>> # This is a complete match:
>>> pattern.match('1233', partial=True).partial
False

* operator not working correctly with sub() (Hg issue 106)

Sometimes it’s not clear how zero-width matches should be handled. For example, should .* match 0 characters directly after matching >0 characters?

>>> regex.sub('.*', 'x', 'test')
'xx'
>>> regex.sub('.*?', '|', 'test')
'|||||||||'

Added capturesdict (Hg issue 86)

capturesdict is a combination of groupdict and captures:

groupdict returns a dict of the named groups and the last capture of those groups.

captures returns a list of all the captures of a group

capturesdict returns a dict of the named groups and lists of all the captures of those groups.

>>> m = regex.match(r"(?:(?P<word>\w+) (?P<digits>\d+)\n)+", "one 1\ntwo 2\nthree 3\n")
>>> m.groupdict()
{'word': 'three', 'digits': '3'}
>>> m.captures("word")
['one', 'two', 'three']
>>> m.captures("digits")
['1', '2', '3']
>>> m.capturesdict()
{'word': ['one', 'two', 'three'], 'digits': ['1', '2', '3']}

Added allcaptures and allspans (Git issue 474)

allcaptures returns a list of all the captures of all the groups.

allspans returns a list of all the spans of the all captures of all the groups.

>>> m = regex.match(r"(?:(?P<word>\w+) (?P<digits>\d+)\n)+", "one 1\ntwo 2\nthree 3\n")
>>> m.allcaptures()
(['one 1\ntwo 2\nthree 3\n'], ['one', 'two', 'three'], ['1', '2', '3'])
>>> m.allspans()
([(0, 20)], [(0, 3), (6, 9), (12, 17)], [(4, 5), (10, 11), (18, 19)])

Allow duplicate names of groups (Hg issue 87)

Group names can be duplicated.

>>> # With optional groups:
>>>
>>> # Both groups capture, the second capture 'overwriting' the first.
>>> m = regex.match(r"(?P<item>\w+)? or (?P<item>\w+)?", "first or second")
>>> m.group("item")
'second'
>>> m.captures("item")
['first', 'second']
>>> # Only the second group captures.
>>> m = regex.match(r"(?P<item>\w+)? or (?P<item>\w+)?", " or second")
>>> m.group("item")
'second'
>>> m.captures("item")
['second']
>>> # Only the first group captures.
>>> m = regex.match(r"(?P<item>\w+)? or (?P<item>\w+)?", "first or ")
>>> m.group("item")
'first'
>>> m.captures("item")
['first']
>>>
>>> # With mandatory groups:
>>>
>>> # Both groups capture, the second capture 'overwriting' the first.
>>> m = regex.match(r"(?P<item>\w*) or (?P<item>\w*)?", "first or second")
>>> m.group("item")
'second'
>>> m.captures("item")
['first', 'second']
>>> # Again, both groups capture, the second capture 'overwriting' the first.
>>> m = regex.match(r"(?P<item>\w*) or (?P<item>\w*)", " or second")
>>> m.group("item")
'second'
>>> m.captures("item")
['', 'second']
>>> # And yet again, both groups capture, the second capture 'overwriting' the first.
>>> m = regex.match(r"(?P<item>\w*) or (?P<item>\w*)", "first or ")
>>> m.group("item")
''
>>> m.captures("item")
['first', '']

Added fullmatch (issue #16203)

fullmatch behaves like match, except that it must match all of the string.

>>> print(regex.fullmatch(r"abc", "abc").span())
(0, 3)
>>> print(regex.fullmatch(r"abc", "abcx"))
None
>>> print(regex.fullmatch(r"abc", "abcx", endpos=3).span())
(0, 3)
>>> print(regex.fullmatch(r"abc", "xabcy", pos=1, endpos=4).span())
(1, 4)
>>>
>>> regex.match(r"a.*?", "abcd").group(0)
'a'
>>> regex.fullmatch(r"a.*?", "abcd").group(0)
'abcd'

Added subf and subfn

subf and subfn are alternatives to sub and subn respectively. When passed a replacement string, they treat it as a format string.

>>> regex.subf(r"(\w+) (\w+)", "{0} => {2} {1}", "foo bar")
'foo bar => bar foo'
>>> regex.subf(r"(?P<word1>\w+) (?P<word2>\w+)", "{word2} {word1}", "foo bar")
'bar foo'

Added expandf to match object

expandf is an alternative to expand. When passed a replacement string, it treats it as a format string.

>>> m = regex.match(r"(\w+) (\w+)", "foo bar")
>>> m.expandf("{0} => {2} {1}")
'foo bar => bar foo'
>>>
>>> m = regex.match(r"(?P<word1>\w+) (?P<word2>\w+)", "foo bar")
>>> m.expandf("{word2} {word1}")
'bar foo'

Detach searched string

A match object contains a reference to the string that was searched, via its string attribute. The detach_string method will ‘detach’ that string, making it available for garbage collection, which might save valuable memory if that string is very large.

>>> m = regex.search(r"\w+", "Hello world")
>>> print(m.group())
Hello
>>> print(m.string)
Hello world
>>> m.detach_string()
>>> print(m.group())
Hello
>>> print(m.string)
None

Recursive patterns (Hg issue 27)

Recursive and repeated patterns are supported.

(?R) or (?0) tries to match the entire regex recursively. (?1), (?2), etc, try to match the relevant group.

(?&name) tries to match the named group.

>>> regex.match(r"(Tarzan|Jane) loves (?1)", "Tarzan loves Jane").groups()
('Tarzan',)
>>> regex.match(r"(Tarzan|Jane) loves (?1)", "Jane loves Tarzan").groups()
('Jane',)

>>> m = regex.search(r"(\w)(?:(?R)|(\w?))\1", "kayak")
>>> m.group(0, 1, 2)
('kayak', 'k', None)

The first two examples show how the subpattern within the group is reused, but is _not_ itself a group. In other words, "(Tarzan|Jane) loves (?1)" is equivalent to "(Tarzan|Jane) loves (?:Tarzan|Jane)".

It’s possible to backtrack into a recursed or repeated group.

You can’t call a group if there is more than one group with that group name or group number ("ambiguous group reference").

The alternative forms (?P>name) and (?P&name) are also supported.

Full Unicode case-folding is supported

In version 1 behaviour, the regex module uses full case-folding when performing case-insensitive matches in Unicode.

>>> regex.match(r"(?iV1)strasse", "stra\N{LATIN SMALL LETTER SHARP S}e").span()
(0, 6)
>>> regex.match(r"(?iV1)stra\N{LATIN SMALL LETTER SHARP S}e", "STRASSE").span()
(0, 7)

In version 0 behaviour, it uses simple case-folding for backward compatibility with the re module.

Approximate “fuzzy” matching (Hg issue 12, Hg issue 41, Hg issue 109)

Regex usually attempts an exact match, but sometimes an approximate, or “fuzzy”, match is needed, for those cases where the text being searched may contain errors in the form of inserted, deleted or substituted characters.

A fuzzy regex specifies which types of errors are permitted, and, optionally, either the minimum and maximum or only the maximum permitted number of each type. (You cannot specify only a minimum.)

The 3 types of error are:

  • Insertion, indicated by “i”

  • Deletion, indicated by “d”

  • Substitution, indicated by “s”

In addition, “e” indicates any type of error.

The fuzziness of a regex item is specified between “{” and “}” after the item.

Examples:

  • foo match “foo” exactly

  • (?:foo){i} match “foo”, permitting insertions

  • (?:foo){d} match “foo”, permitting deletions

  • (?:foo){s} match “foo”, permitting substitutions

  • (?:foo){i,s} match “foo”, permitting insertions and substitutions

  • (?:foo){e} match “foo”, permitting errors

If a certain type of error is specified, then any type not specified will not be permitted.

In the following examples I’ll omit the item and write only the fuzziness:

  • {d<=3} permit at most 3 deletions, but no other types

  • {i<=1,s<=2} permit at most 1 insertion and at most 2 substitutions, but no deletions

  • {1<=e<=3} permit at least 1 and at most 3 errors

  • {i<=2,d<=2,e<=3} permit at most 2 insertions, at most 2 deletions, at most 3 errors in total, but no substitutions

It’s also possible to state the costs of each type of error and the maximum permitted total cost.

Examples:

  • {2i+2d+1s<=4} each insertion costs 2, each deletion costs 2, each substitution costs 1, the total cost must not exceed 4

  • {i<=1,d<=1,s<=1,2i+2d+1s<=4} at most 1 insertion, at most 1 deletion, at most 1 substitution; each insertion costs 2, each deletion costs 2, each substitution costs 1, the total cost must not exceed 4

You can also use “<” instead of “<=” if you want an exclusive minimum or maximum.

You can add a test to perform on a character that’s substituted or inserted.

Examples:

  • {s<=2:[a-z]} at most 2 substitutions, which must be in the character set [a-z].

  • {s<=2,i<=3:\d} at most 2 substitutions, at most 3 insertions, which must be digits.

By default, fuzzy matching searches for the first match that meets the given constraints. The ENHANCEMATCH flag will cause it to attempt to improve the fit (i.e. reduce the number of errors) of the match that it has found.

The BESTMATCH flag will make it search for the best match instead.

Further examples to note:

  • regex.search("(dog){e}", "cat and dog")[1] returns "cat" because that matches "dog" with 3 errors (an unlimited number of errors is permitted).

  • regex.search("(dog){e<=1}", "cat and dog")[1] returns " dog" (with a leading space) because that matches "dog" with 1 error, which is within the limit.

  • regex.search("(?e)(dog){e<=1}", "cat and dog")[1] returns "dog" (without a leading space) because the fuzzy search matches " dog" with 1 error, which is within the limit, and the (?e) then it attempts a better fit.

In the first two examples there are perfect matches later in the string, but in neither case is it the first possible match.

The match object has an attribute fuzzy_counts which gives the total number of substitutions, insertions and deletions.

>>> # A 'raw' fuzzy match:
>>> regex.fullmatch(r"(?:cats|cat){e<=1}", "cat").fuzzy_counts
(0, 0, 1)
>>> # 0 substitutions, 0 insertions, 1 deletion.

>>> # A better match might be possible if the ENHANCEMATCH flag used:
>>> regex.fullmatch(r"(?e)(?:cats|cat){e<=1}", "cat").fuzzy_counts
(0, 0, 0)
>>> # 0 substitutions, 0 insertions, 0 deletions.

The match object also has an attribute fuzzy_changes which gives a tuple of the positions of the substitutions, insertions and deletions.

>>> m = regex.search('(fuu){i<=2,d<=2,e<=5}', 'anaconda foo bar')
>>> m
<regex.Match object; span=(7, 10), match='a f', fuzzy_counts=(0, 2, 2)>
>>> m.fuzzy_changes
([], [7, 8], [10, 11])

What this means is that if the matched part of the string had been:

'anacondfuuoo bar'

it would’ve been an exact match.

However, there were insertions at positions 7 and 8:

'anaconda fuuoo bar'
        ^^

and deletions at positions 10 and 11:

'anaconda f~~oo bar'
           ^^

So the actual string was:

'anaconda foo bar'

Named lists \L<name> (Hg issue 11)

There are occasions where you may want to include a list (actually, a set) of options in a regex.

One way is to build the pattern like this:

>>> p = regex.compile(r"first|second|third|fourth|fifth")

but if the list is large, parsing the resulting regex can take considerable time, and care must also be taken that the strings are properly escaped and properly ordered, for example, “cats” before “cat”.

The new alternative is to use a named list:

>>> option_set = ["first", "second", "third", "fourth", "fifth"]
>>> p = regex.compile(r"\L<options>", options=option_set)

The order of the items is irrelevant, they are treated as a set. The named lists are available as the .named_lists attribute of the pattern object :

>>> print(p.named_lists)
{'options': frozenset({'third', 'first', 'fifth', 'fourth', 'second'})}

If there are any unused keyword arguments, ValueError will be raised unless you tell it otherwise:

>>> option_set = ["first", "second", "third", "fourth", "fifth"]
>>> p = regex.compile(r"\L<options>", options=option_set, other_options=[])
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
  File "C:\Python310\lib\site-packages\regex\regex.py", line 353, in compile
    return _compile(pattern, flags, ignore_unused, kwargs, cache_pattern)
  File "C:\Python310\lib\site-packages\regex\regex.py", line 500, in _compile
    complain_unused_args()
  File "C:\Python310\lib\site-packages\regex\regex.py", line 483, in complain_unused_args
    raise ValueError('unused keyword argument {!a}'.format(any_one))
ValueError: unused keyword argument 'other_options'
>>> p = regex.compile(r"\L<options>", options=option_set, other_options=[], ignore_unused=True)
>>> p = regex.compile(r"\L<options>", options=option_set, other_options=[], ignore_unused=False)
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
  File "C:\Python310\lib\site-packages\regex\regex.py", line 353, in compile
    return _compile(pattern, flags, ignore_unused, kwargs, cache_pattern)
  File "C:\Python310\lib\site-packages\regex\regex.py", line 500, in _compile
    complain_unused_args()
  File "C:\Python310\lib\site-packages\regex\regex.py", line 483, in complain_unused_args
    raise ValueError('unused keyword argument {!a}'.format(any_one))
ValueError: unused keyword argument 'other_options'
>>>

Start and end of word

\m matches at the start of a word.

\M matches at the end of a word.

Compare with \b, which matches at the start or end of a word.

Unicode line separators

Normally the only line separator is \n (\x0A), but if the WORD flag is turned on then the line separators are \x0D\x0A, \x0A, \x0B, \x0C and \x0D, plus \x85, \u2028 and \u2029 when working with Unicode.

This affects the regex dot ".", which, with the DOTALL flag turned off, matches any character except a line separator. It also affects the line anchors ^ and $ (in multiline mode).

Set operators

Version 1 behaviour only

Set operators have been added, and a set [...] can include nested sets.

The operators, in order of increasing precedence, are:

  • || for union (“x||y” means “x or y”)

  • ~~ (double tilde) for symmetric difference (“x~~y” means “x or y, but not both”)

  • && for intersection (“x&&y” means “x and y”)

  • -- (double dash) for difference (“x–y” means “x but not y”)

Implicit union, ie, simple juxtaposition like in [ab], has the highest precedence. Thus, [ab&&cd] is the same as [[a||b]&&[c||d]].

Examples:

  • [ab] # Set containing ‘a’ and ‘b’

  • [a-z] # Set containing ‘a’ .. ‘z’

  • [[a-z]--[qw]] # Set containing ‘a’ .. ‘z’, but not ‘q’ or ‘w’

  • [a-z--qw] # Same as above

  • [\p{L}--QW] # Set containing all letters except ‘Q’ and ‘W’

  • [\p{N}--[0-9]] # Set containing all numbers except ‘0’ .. ‘9’

  • [\p{ASCII}&&\p{Letter}] # Set containing all characters which are ASCII and letter

regex.escape (issue #2650)

regex.escape has an additional keyword parameter special_only. When True, only ‘special’ regex characters, such as ‘?’, are escaped.

>>> regex.escape("foo!?", special_only=False)
'foo\\!\\?'
>>> regex.escape("foo!?", special_only=True)
'foo!\\?'

regex.escape (Hg issue 249)

regex.escape has an additional keyword parameter literal_spaces. When True, spaces are not escaped.

>>> regex.escape("foo bar!?", literal_spaces=False)
'foo\\ bar!\\?'
>>> regex.escape("foo bar!?", literal_spaces=True)
'foo bar!\\?'

Repeated captures (issue #7132)

A match object has additional methods which return information on all the successful matches of a repeated group. These methods are:

  • matchobject.captures([group1, ...])

    • Returns a list of the strings matched in a group or groups. Compare with matchobject.group([group1, ...]).

  • matchobject.starts([group])

    • Returns a list of the start positions. Compare with matchobject.start([group]).

  • matchobject.ends([group])

    • Returns a list of the end positions. Compare with matchobject.end([group]).

  • matchobject.spans([group])

    • Returns a list of the spans. Compare with matchobject.span([group]).

>>> m = regex.search(r"(\w{3})+", "123456789")
>>> m.group(1)
'789'
>>> m.captures(1)
['123', '456', '789']
>>> m.start(1)
6
>>> m.starts(1)
[0, 3, 6]
>>> m.end(1)
9
>>> m.ends(1)
[3, 6, 9]
>>> m.span(1)
(6, 9)
>>> m.spans(1)
[(0, 3), (3, 6), (6, 9)]

Atomic grouping (?>...) (issue #433030)

If the following pattern subsequently fails, then the subpattern as a whole will fail.

Possessive quantifiers

(?:...)?+ ; (?:...)*+ ; (?:...)++ ; (?:...){min,max}+

The subpattern is matched up to ‘max’ times. If the following pattern subsequently fails, then all the repeated subpatterns will fail as a whole. For example, (?:...)++ is equivalent to (?>(?:...)+).

Scoped flags (issue #433028)

(?flags-flags:...)

The flags will apply only to the subpattern. Flags can be turned on or off.

Definition of ‘word’ character (issue #1693050)

The definition of a ‘word’ character has been expanded for Unicode. It conforms to the Unicode specification at http://www.unicode.org/reports/tr29/.

Variable-length lookbehind

A lookbehind can match a variable-length string.

Flags argument for regex.split, regex.sub and regex.subn (issue #3482)

regex.split, regex.sub and regex.subn support a ‘flags’ argument.

Pos and endpos arguments for regex.sub and regex.subn

regex.sub and regex.subn support ‘pos’ and ‘endpos’ arguments.

‘Overlapped’ argument for regex.findall and regex.finditer

regex.findall and regex.finditer support an ‘overlapped’ flag which permits overlapped matches.

Splititer

regex.splititer has been added. It’s a generator equivalent of regex.split.

Subscripting match objects for groups

A match object accepts access to the groups via subscripting and slicing:

>>> m = regex.search(r"(?P<before>.*?)(?P<num>\d+)(?P<after>.*)", "pqr123stu")
>>> print(m["before"])
pqr
>>> print(len(m))
4
>>> print(m[:])
('pqr123stu', 'pqr', '123', 'stu')

Named groups

Groups can be named with (?<name>...) as well as the existing (?P<name>...).

Group references

Groups can be referenced within a pattern with \g<name>. This also allows there to be more than 99 groups.

Named characters \N{name}

Named characters are supported. Note that only those known by Python’s Unicode database will be recognised.

Unicode codepoint properties, including scripts and blocks

\p{property=value}; \P{property=value}; \p{value} ; \P{value}

Many Unicode properties are supported, including blocks and scripts. \p{property=value} or \p{property:value} matches a character whose property property has value value. The inverse of \p{property=value} is \P{property=value} or \p{^property=value}.

If the short form \p{value} is used, the properties are checked in the order: General_Category, Script, Block, binary property:

  • Latin, the ‘Latin’ script (Script=Latin).

  • BasicLatin, the ‘BasicLatin’ block (Block=BasicLatin).

  • Alphabetic, the ‘Alphabetic’ binary property (Alphabetic=Yes).

A short form starting with Is indicates a script or binary property:

  • IsLatin, the ‘Latin’ script (Script=Latin).

  • IsAlphabetic, the ‘Alphabetic’ binary property (Alphabetic=Yes).

A short form starting with In indicates a block property:

  • InBasicLatin, the ‘BasicLatin’ block (Block=BasicLatin).

POSIX character classes

[[:alpha:]]; [[:^alpha:]]

POSIX character classes are supported. These are normally treated as an alternative form of \p{...}.

The exceptions are alnum, digit, punct and xdigit, whose definitions are different from those of Unicode.

[[:alnum:]] is equivalent to \p{posix_alnum}.

[[:digit:]] is equivalent to \p{posix_digit}.

[[:punct:]] is equivalent to \p{posix_punct}.

[[:xdigit:]] is equivalent to \p{posix_xdigit}.

Search anchor \G

A search anchor has been added. It matches at the position where each search started/continued and can be used for contiguous matches or in negative variable-length lookbehinds to limit how far back the lookbehind goes:

>>> regex.findall(r"\w{2}", "abcd ef")
['ab', 'cd', 'ef']
>>> regex.findall(r"\G\w{2}", "abcd ef")
['ab', 'cd']
  • The search starts at position 0 and matches ‘ab’.

  • The search continues at position 2 and matches ‘cd’.

  • The search continues at position 4 and fails to match any letters.

  • The anchor stops the search start position from being advanced, so there are no more results.

Reverse searching

Searches can also work backwards:

>>> regex.findall(r".", "abc")
['a', 'b', 'c']
>>> regex.findall(r"(?r).", "abc")
['c', 'b', 'a']

Note that the result of a reverse search is not necessarily the reverse of a forward search:

>>> regex.findall(r"..", "abcde")
['ab', 'cd']
>>> regex.findall(r"(?r)..", "abcde")
['de', 'bc']

Matching a single grapheme \X

The grapheme matcher is supported. It conforms to the Unicode specification at http://www.unicode.org/reports/tr29/.

Branch reset (?|...|...)

Group numbers will be reused across the alternatives, but groups with different names will have different group numbers.

>>> regex.match(r"(?|(first)|(second))", "first").groups()
('first',)
>>> regex.match(r"(?|(first)|(second))", "second").groups()
('second',)

Note that there is only one group.

Default Unicode word boundary

The WORD flag changes the definition of a ‘word boundary’ to that of a default Unicode word boundary. This applies to \b and \B.

Timeout

The matching methods and functions support timeouts. The timeout (in seconds) applies to the entire operation:

>>> from time import sleep
>>>
>>> def fast_replace(m):
...     return 'X'
...
>>> def slow_replace(m):
...     sleep(0.5)
...     return 'X'
...
>>> regex.sub(r'[a-z]', fast_replace, 'abcde', timeout=2)
'XXXXX'
>>> regex.sub(r'[a-z]', slow_replace, 'abcde', timeout=2)
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
  File "C:\Python310\lib\site-packages\regex\regex.py", line 278, in sub
    return pat.sub(repl, string, count, pos, endpos, concurrent, timeout)
TimeoutError: regex timed out

Project details


Release history Release notifications | RSS feed

Download files

Download the file for your platform. If you're not sure which to choose, learn more about installing packages.

Source Distribution

regex-2024.7.24.tar.gz (393.5 kB view details)

Uploaded Source

Built Distributions

If you're not sure about the file name format, learn more about wheel file names.

regex-2024.7.24-cp312-cp312-win_amd64.whl (269.2 kB view details)

Uploaded CPython 3.12Windows x86-64

regex-2024.7.24-cp312-cp312-win32.whl (258.1 kB view details)

Uploaded CPython 3.12Windows x86

regex-2024.7.24-cp312-cp312-musllinux_1_2_x86_64.whl (781.4 kB view details)

Uploaded CPython 3.12musllinux: musl 1.2+ x86-64

regex-2024.7.24-cp312-cp312-musllinux_1_2_s390x.whl (853.3 kB view details)

Uploaded CPython 3.12musllinux: musl 1.2+ s390x

regex-2024.7.24-cp312-cp312-musllinux_1_2_ppc64le.whl (854.5 kB view details)

Uploaded CPython 3.12musllinux: musl 1.2+ ppc64le

regex-2024.7.24-cp312-cp312-musllinux_1_2_i686.whl (784.5 kB view details)

Uploaded CPython 3.12musllinux: musl 1.2+ i686

regex-2024.7.24-cp312-cp312-musllinux_1_2_aarch64.whl (776.9 kB view details)

Uploaded CPython 3.12musllinux: musl 1.2+ ARM64

regex-2024.7.24-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.whl (790.9 kB view details)

Uploaded CPython 3.12manylinux: glibc 2.17+ x86-64

regex-2024.7.24-cp312-cp312-manylinux_2_17_s390x.manylinux2014_s390x.whl (817.5 kB view details)

Uploaded CPython 3.12manylinux: glibc 2.17+ s390x

regex-2024.7.24-cp312-cp312-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl (831.7 kB view details)

Uploaded CPython 3.12manylinux: glibc 2.17+ ppc64le

regex-2024.7.24-cp312-cp312-manylinux_2_17_aarch64.manylinux2014_aarch64.whl (789.7 kB view details)

Uploaded CPython 3.12manylinux: glibc 2.17+ ARM64

regex-2024.7.24-cp312-cp312-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl (779.2 kB view details)

Uploaded CPython 3.12manylinux: glibc 2.17+ i686manylinux: glibc 2.5+ i686

regex-2024.7.24-cp312-cp312-macosx_11_0_arm64.whl (279.1 kB view details)

Uploaded CPython 3.12macOS 11.0+ ARM64

regex-2024.7.24-cp312-cp312-macosx_10_9_x86_64.whl (282.8 kB view details)

Uploaded CPython 3.12macOS 10.9+ x86-64

regex-2024.7.24-cp312-cp312-macosx_10_9_universal2.whl (471.7 kB view details)

Uploaded CPython 3.12macOS 10.9+ universal2 (ARM64, x86-64)

regex-2024.7.24-cp311-cp311-win_amd64.whl (269.7 kB view details)

Uploaded CPython 3.11Windows x86-64

regex-2024.7.24-cp311-cp311-win32.whl (257.7 kB view details)

Uploaded CPython 3.11Windows x86

regex-2024.7.24-cp311-cp311-musllinux_1_2_x86_64.whl (776.7 kB view details)

Uploaded CPython 3.11musllinux: musl 1.2+ x86-64

regex-2024.7.24-cp311-cp311-musllinux_1_2_s390x.whl (849.5 kB view details)

Uploaded CPython 3.11musllinux: musl 1.2+ s390x

regex-2024.7.24-cp311-cp311-musllinux_1_2_ppc64le.whl (849.4 kB view details)

Uploaded CPython 3.11musllinux: musl 1.2+ ppc64le

regex-2024.7.24-cp311-cp311-musllinux_1_2_i686.whl (778.4 kB view details)

Uploaded CPython 3.11musllinux: musl 1.2+ i686

regex-2024.7.24-cp311-cp311-musllinux_1_2_aarch64.whl (772.8 kB view details)

Uploaded CPython 3.11musllinux: musl 1.2+ ARM64

regex-2024.7.24-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl (786.6 kB view details)

Uploaded CPython 3.11manylinux: glibc 2.17+ x86-64

regex-2024.7.24-cp311-cp311-manylinux_2_17_s390x.manylinux2014_s390x.whl (812.6 kB view details)

Uploaded CPython 3.11manylinux: glibc 2.17+ s390x

regex-2024.7.24-cp311-cp311-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl (828.2 kB view details)

Uploaded CPython 3.11manylinux: glibc 2.17+ ppc64le

regex-2024.7.24-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl (785.4 kB view details)

Uploaded CPython 3.11manylinux: glibc 2.17+ ARM64

regex-2024.7.24-cp311-cp311-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl (775.3 kB view details)

Uploaded CPython 3.11manylinux: glibc 2.17+ i686manylinux: glibc 2.5+ i686

regex-2024.7.24-cp311-cp311-macosx_11_0_arm64.whl (278.9 kB view details)

Uploaded CPython 3.11macOS 11.0+ ARM64

regex-2024.7.24-cp311-cp311-macosx_10_9_x86_64.whl (282.1 kB view details)

Uploaded CPython 3.11macOS 10.9+ x86-64

regex-2024.7.24-cp311-cp311-macosx_10_9_universal2.whl (470.8 kB view details)

Uploaded CPython 3.11macOS 10.9+ universal2 (ARM64, x86-64)

regex-2024.7.24-cp310-cp310-win_amd64.whl (269.7 kB view details)

Uploaded CPython 3.10Windows x86-64

regex-2024.7.24-cp310-cp310-win32.whl (257.7 kB view details)

Uploaded CPython 3.10Windows x86

regex-2024.7.24-cp310-cp310-musllinux_1_2_x86_64.whl (767.5 kB view details)

Uploaded CPython 3.10musllinux: musl 1.2+ x86-64

regex-2024.7.24-cp310-cp310-musllinux_1_2_s390x.whl (839.0 kB view details)

Uploaded CPython 3.10musllinux: musl 1.2+ s390x

regex-2024.7.24-cp310-cp310-musllinux_1_2_ppc64le.whl (840.8 kB view details)

Uploaded CPython 3.10musllinux: musl 1.2+ ppc64le

regex-2024.7.24-cp310-cp310-musllinux_1_2_i686.whl (772.0 kB view details)

Uploaded CPython 3.10musllinux: musl 1.2+ i686

regex-2024.7.24-cp310-cp310-musllinux_1_2_aarch64.whl (763.0 kB view details)

Uploaded CPython 3.10musllinux: musl 1.2+ ARM64

regex-2024.7.24-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl (776.5 kB view details)

Uploaded CPython 3.10manylinux: glibc 2.17+ x86-64

regex-2024.7.24-cp310-cp310-manylinux_2_17_s390x.manylinux2014_s390x.whl (804.0 kB view details)

Uploaded CPython 3.10manylinux: glibc 2.17+ s390x

regex-2024.7.24-cp310-cp310-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl (819.0 kB view details)

Uploaded CPython 3.10manylinux: glibc 2.17+ ppc64le

regex-2024.7.24-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl (777.7 kB view details)

Uploaded CPython 3.10manylinux: glibc 2.17+ ARM64

regex-2024.7.24-cp310-cp310-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_12_x86_64.manylinux2010_x86_64.whl (692.2 kB view details)

Uploaded CPython 3.10manylinux: glibc 2.12+ x86-64manylinux: glibc 2.5+ x86-64

regex-2024.7.24-cp310-cp310-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl (766.9 kB view details)

Uploaded CPython 3.10manylinux: glibc 2.17+ i686manylinux: glibc 2.5+ i686

regex-2024.7.24-cp310-cp310-macosx_11_0_arm64.whl (278.9 kB view details)

Uploaded CPython 3.10macOS 11.0+ ARM64

regex-2024.7.24-cp310-cp310-macosx_10_9_x86_64.whl (282.1 kB view details)

Uploaded CPython 3.10macOS 10.9+ x86-64

regex-2024.7.24-cp310-cp310-macosx_10_9_universal2.whl (470.8 kB view details)

Uploaded CPython 3.10macOS 10.9+ universal2 (ARM64, x86-64)

regex-2024.7.24-cp39-cp39-win_amd64.whl (269.7 kB view details)

Uploaded CPython 3.9Windows x86-64

regex-2024.7.24-cp39-cp39-win32.whl (257.7 kB view details)

Uploaded CPython 3.9Windows x86

regex-2024.7.24-cp39-cp39-musllinux_1_2_x86_64.whl (767.1 kB view details)

Uploaded CPython 3.9musllinux: musl 1.2+ x86-64

regex-2024.7.24-cp39-cp39-musllinux_1_2_s390x.whl (838.5 kB view details)

Uploaded CPython 3.9musllinux: musl 1.2+ s390x

regex-2024.7.24-cp39-cp39-musllinux_1_2_ppc64le.whl (840.2 kB view details)

Uploaded CPython 3.9musllinux: musl 1.2+ ppc64le

regex-2024.7.24-cp39-cp39-musllinux_1_2_i686.whl (771.5 kB view details)

Uploaded CPython 3.9musllinux: musl 1.2+ i686

regex-2024.7.24-cp39-cp39-musllinux_1_2_aarch64.whl (762.3 kB view details)

Uploaded CPython 3.9musllinux: musl 1.2+ ARM64

regex-2024.7.24-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.whl (775.9 kB view details)

Uploaded CPython 3.9manylinux: glibc 2.17+ x86-64

regex-2024.7.24-cp39-cp39-manylinux_2_17_s390x.manylinux2014_s390x.whl (803.4 kB view details)

Uploaded CPython 3.9manylinux: glibc 2.17+ s390x

regex-2024.7.24-cp39-cp39-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl (818.4 kB view details)

Uploaded CPython 3.9manylinux: glibc 2.17+ ppc64le

regex-2024.7.24-cp39-cp39-manylinux_2_17_aarch64.manylinux2014_aarch64.whl (777.1 kB view details)

Uploaded CPython 3.9manylinux: glibc 2.17+ ARM64

regex-2024.7.24-cp39-cp39-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_12_x86_64.manylinux2010_x86_64.whl (691.6 kB view details)

Uploaded CPython 3.9manylinux: glibc 2.12+ x86-64manylinux: glibc 2.5+ x86-64

regex-2024.7.24-cp39-cp39-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl (766.4 kB view details)

Uploaded CPython 3.9manylinux: glibc 2.17+ i686manylinux: glibc 2.5+ i686

regex-2024.7.24-cp39-cp39-macosx_11_0_arm64.whl (278.9 kB view details)

Uploaded CPython 3.9macOS 11.0+ ARM64

regex-2024.7.24-cp39-cp39-macosx_10_9_x86_64.whl (282.1 kB view details)

Uploaded CPython 3.9macOS 10.9+ x86-64

regex-2024.7.24-cp39-cp39-macosx_10_9_universal2.whl (470.8 kB view details)

Uploaded CPython 3.9macOS 10.9+ universal2 (ARM64, x86-64)

regex-2024.7.24-cp38-cp38-win_amd64.whl (269.7 kB view details)

Uploaded CPython 3.8Windows x86-64

regex-2024.7.24-cp38-cp38-win32.whl (257.7 kB view details)

Uploaded CPython 3.8Windows x86

regex-2024.7.24-cp38-cp38-musllinux_1_2_x86_64.whl (768.9 kB view details)

Uploaded CPython 3.8musllinux: musl 1.2+ x86-64

regex-2024.7.24-cp38-cp38-musllinux_1_2_s390x.whl (840.3 kB view details)

Uploaded CPython 3.8musllinux: musl 1.2+ s390x

regex-2024.7.24-cp38-cp38-musllinux_1_2_ppc64le.whl (841.6 kB view details)

Uploaded CPython 3.8musllinux: musl 1.2+ ppc64le

regex-2024.7.24-cp38-cp38-musllinux_1_2_i686.whl (771.7 kB view details)

Uploaded CPython 3.8musllinux: musl 1.2+ i686

regex-2024.7.24-cp38-cp38-musllinux_1_2_aarch64.whl (765.1 kB view details)

Uploaded CPython 3.8musllinux: musl 1.2+ ARM64

regex-2024.7.24-cp38-cp38-manylinux_2_17_x86_64.manylinux2014_x86_64.whl (778.9 kB view details)

Uploaded CPython 3.8manylinux: glibc 2.17+ x86-64

regex-2024.7.24-cp38-cp38-manylinux_2_17_s390x.manylinux2014_s390x.whl (804.8 kB view details)

Uploaded CPython 3.8manylinux: glibc 2.17+ s390x

regex-2024.7.24-cp38-cp38-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl (820.0 kB view details)

Uploaded CPython 3.8manylinux: glibc 2.17+ ppc64le

regex-2024.7.24-cp38-cp38-manylinux_2_17_aarch64.manylinux2014_aarch64.whl (779.2 kB view details)

Uploaded CPython 3.8manylinux: glibc 2.17+ ARM64

regex-2024.7.24-cp38-cp38-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_12_x86_64.manylinux2010_x86_64.whl (696.9 kB view details)

Uploaded CPython 3.8manylinux: glibc 2.12+ x86-64manylinux: glibc 2.5+ x86-64

regex-2024.7.24-cp38-cp38-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl (768.8 kB view details)

Uploaded CPython 3.8manylinux: glibc 2.17+ i686manylinux: glibc 2.5+ i686

regex-2024.7.24-cp38-cp38-macosx_11_0_arm64.whl (278.9 kB view details)

Uploaded CPython 3.8macOS 11.0+ ARM64

regex-2024.7.24-cp38-cp38-macosx_10_9_x86_64.whl (282.3 kB view details)

Uploaded CPython 3.8macOS 10.9+ x86-64

regex-2024.7.24-cp38-cp38-macosx_10_9_universal2.whl (470.9 kB view details)

Uploaded CPython 3.8macOS 10.9+ universal2 (ARM64, x86-64)

File details

Details for the file regex-2024.7.24.tar.gz.

File metadata

  • Download URL: regex-2024.7.24.tar.gz
  • Upload date:
  • Size: 393.5 kB
  • Tags: Source
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/5.1.0 CPython/3.12.4

File hashes

Hashes for regex-2024.7.24.tar.gz
Algorithm Hash digest
SHA256 9cfd009eed1a46b27c14039ad5bbc5e71b6367c5b2e6d5f5da0ea91600817506
MD5 1f23019dcf303d487abdfa18ad18402d
BLAKE2b-256 3f5164256d0dc72816a4fe3779449627c69ec8fee5a5625fd60ba048f53b3478

See more details on using hashes here.

File details

Details for the file regex-2024.7.24-cp312-cp312-win_amd64.whl.

File metadata

  • Download URL: regex-2024.7.24-cp312-cp312-win_amd64.whl
  • Upload date:
  • Size: 269.2 kB
  • Tags: CPython 3.12, Windows x86-64
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/5.1.0 CPython/3.12.4

File hashes

Hashes for regex-2024.7.24-cp312-cp312-win_amd64.whl
Algorithm Hash digest
SHA256 2f1baff13cc2521bea83ab2528e7a80cbe0ebb2c6f0bfad15be7da3aed443908
MD5 04eba5e9bc63defbc1f8e88e43ff8c72
BLAKE2b-256 95b310e875c45c60b010b66fc109b899c6fc4f05d485fe1d54abff98ce791124

See more details on using hashes here.

File details

Details for the file regex-2024.7.24-cp312-cp312-win32.whl.

File metadata

  • Download URL: regex-2024.7.24-cp312-cp312-win32.whl
  • Upload date:
  • Size: 258.1 kB
  • Tags: CPython 3.12, Windows x86
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/5.1.0 CPython/3.12.4

File hashes

Hashes for regex-2024.7.24-cp312-cp312-win32.whl
Algorithm Hash digest
SHA256 185e029368d6f89f36e526764cf12bf8d6f0e3a2a7737da625a76f594bdfcbfc
MD5 3c204467742bb0c196308163ece01115
BLAKE2b-256 bf71d0af58199283ada7d25b20e416f5b155f50aad99b0e791c0966ff5a1cd00

See more details on using hashes here.

File details

Details for the file regex-2024.7.24-cp312-cp312-musllinux_1_2_x86_64.whl.

File metadata

File hashes

Hashes for regex-2024.7.24-cp312-cp312-musllinux_1_2_x86_64.whl
Algorithm Hash digest
SHA256 eaef80eac3b4cfbdd6de53c6e108b4c534c21ae055d1dbea2de6b3b8ff3def38
MD5 4522353143840ed1e22e0ca69fba659b
BLAKE2b-256 ff042b79ad0bb9bc05ab4386caa2c19aa047a66afcbdfc2640618ffc729841e4

See more details on using hashes here.

File details

Details for the file regex-2024.7.24-cp312-cp312-musllinux_1_2_s390x.whl.

File metadata

File hashes

Hashes for regex-2024.7.24-cp312-cp312-musllinux_1_2_s390x.whl
Algorithm Hash digest
SHA256 731fcd76bbdbf225e2eb85b7c38da9633ad3073822f5ab32379381e8c3c12e94
MD5 0d70e92f9f15af5fa15c66f82fcbb04a
BLAKE2b-256 5677fde8d825dec69e70256e0925af6c81eea9acf0a634d3d80f619d8dcd6888

See more details on using hashes here.

File details

Details for the file regex-2024.7.24-cp312-cp312-musllinux_1_2_ppc64le.whl.

File metadata

File hashes

Hashes for regex-2024.7.24-cp312-cp312-musllinux_1_2_ppc64le.whl
Algorithm Hash digest
SHA256 5eefee9bfe23f6df09ffb6dfb23809f4d74a78acef004aa904dc7c88b9944b05
MD5 66cb4ccbe3b825ec04d0241c5229cdbb
BLAKE2b-256 d4aceb6a796da0bdefbf09644a7868309423b18d344cf49963a9d36c13502d46

See more details on using hashes here.

File details

Details for the file regex-2024.7.24-cp312-cp312-musllinux_1_2_i686.whl.

File metadata

File hashes

Hashes for regex-2024.7.24-cp312-cp312-musllinux_1_2_i686.whl
Algorithm Hash digest
SHA256 86b17ba823ea76256b1885652e3a141a99a5c4422f4a869189db328321b73799
MD5 d3f31541eac2b7bbad94e811606e50e8
BLAKE2b-256 9caede659bdfff80ad2c0b577a43dd89dbc43870a4fc4bbf604e452196758e83

See more details on using hashes here.

File details

Details for the file regex-2024.7.24-cp312-cp312-musllinux_1_2_aarch64.whl.

File metadata

File hashes

Hashes for regex-2024.7.24-cp312-cp312-musllinux_1_2_aarch64.whl
Algorithm Hash digest
SHA256 a512eed9dfd4117110b1881ba9a59b31433caed0c4101b361f768e7bcbaf93c5
MD5 6a44330eeca7485efe01e2ba77becb84
BLAKE2b-256 3a27b242a962f650c3213da4596d70e24c7c1c46e3aa0f79f2a81164291085f8

See more details on using hashes here.

File details

Details for the file regex-2024.7.24-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.whl.

File metadata

File hashes

Hashes for regex-2024.7.24-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.whl
Algorithm Hash digest
SHA256 d55588cba7553f0b6ec33130bc3e114b355570b45785cebdc9daed8c637dd440
MD5 f4df9cbd763df5bb068b719e212a4613
BLAKE2b-256 f9ae5f23e64f6cf170614237c654f3501a912dfb8549143d4b91d1cd13dba319

See more details on using hashes here.

File details

Details for the file regex-2024.7.24-cp312-cp312-manylinux_2_17_s390x.manylinux2014_s390x.whl.

File metadata

File hashes

Hashes for regex-2024.7.24-cp312-cp312-manylinux_2_17_s390x.manylinux2014_s390x.whl
Algorithm Hash digest
SHA256 7214477bf9bd195894cf24005b1e7b496f46833337b5dedb7b2a6e33f66d962c
MD5 906600798404b8101fe6f6e01dac8024
BLAKE2b-256 3d6d2a21c85f970f9be79357d12cf4b97f4fc6bf3bf6b843c39dabbc4e5f1181

See more details on using hashes here.

File details

Details for the file regex-2024.7.24-cp312-cp312-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl.

File metadata

File hashes

Hashes for regex-2024.7.24-cp312-cp312-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl
Algorithm Hash digest
SHA256 80c811cfcb5c331237d9bad3bea2c391114588cf4131707e84d9493064d267f9
MD5 ede3448d3a5b3da11108128d0c77f7be
BLAKE2b-256 09fb5381b19b62f3a3494266be462f6a015a869cf4bfd8e14d6e7db67e2c8069

See more details on using hashes here.

File details

Details for the file regex-2024.7.24-cp312-cp312-manylinux_2_17_aarch64.manylinux2014_aarch64.whl.

File metadata

File hashes

Hashes for regex-2024.7.24-cp312-cp312-manylinux_2_17_aarch64.manylinux2014_aarch64.whl
Algorithm Hash digest
SHA256 6a1141a1dcc32904c47f6846b040275c6e5de0bf73f17d7a409035d55b76f289
MD5 fd2c6671ec30b3e6c19b9efbeac5f9cb
BLAKE2b-256 7258b5161bf890b6ca575a25685f19a4a3e3b6f4a072238814f8658123177d84

See more details on using hashes here.

File details

Details for the file regex-2024.7.24-cp312-cp312-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl.

File metadata

File hashes

Hashes for regex-2024.7.24-cp312-cp312-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl
Algorithm Hash digest
SHA256 558a57cfc32adcf19d3f791f62b5ff564922942e389e3cfdb538a23d65a6b610
MD5 50dea091487c21e42809549232e4bd42
BLAKE2b-256 290ad04baad1bbc49cdfb4aef90c4fc875a60aaf96d35a1616f1dfe8149716bc

See more details on using hashes here.

File details

Details for the file regex-2024.7.24-cp312-cp312-macosx_11_0_arm64.whl.

File metadata

File hashes

Hashes for regex-2024.7.24-cp312-cp312-macosx_11_0_arm64.whl
Algorithm Hash digest
SHA256 7df9ea48641da022c2a3c9c641650cd09f0cd15e8908bf931ad538f5ca7919c9
MD5 3104a0577102857e572ba1a8ea57bfbb
BLAKE2b-256 9bf2c6182095baf0a10169c34e87133a8e73b2e816a80035669b1278e927685e

See more details on using hashes here.

File details

Details for the file regex-2024.7.24-cp312-cp312-macosx_10_9_x86_64.whl.

File metadata

File hashes

Hashes for regex-2024.7.24-cp312-cp312-macosx_10_9_x86_64.whl
Algorithm Hash digest
SHA256 74007a5b25b7a678459f06559504f1eec2f0f17bca218c9d56f6a0a12bfffdad
MD5 d935d084c0ccb4fbb330f2889ab0d6d3
BLAKE2b-256 bb1dea9a21beeb433dbfca31ab82867d69cb67ff8674af9fab6ebd55fa9d3387

See more details on using hashes here.

File details

Details for the file regex-2024.7.24-cp312-cp312-macosx_10_9_universal2.whl.

File metadata

File hashes

Hashes for regex-2024.7.24-cp312-cp312-macosx_10_9_universal2.whl
Algorithm Hash digest
SHA256 fe4ebef608553aff8deb845c7f4f1d0740ff76fa672c011cc0bacb2a00fbde86
MD5 0e6ca677912facc642ff16d2017d8a17
BLAKE2b-256 0f26f505782f386ac0399a9237571833f187414882ab6902e2e71a1ecb506835

See more details on using hashes here.

File details

Details for the file regex-2024.7.24-cp311-cp311-win_amd64.whl.

File metadata

  • Download URL: regex-2024.7.24-cp311-cp311-win_amd64.whl
  • Upload date:
  • Size: 269.7 kB
  • Tags: CPython 3.11, Windows x86-64
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/5.1.0 CPython/3.12.4

File hashes

Hashes for regex-2024.7.24-cp311-cp311-win_amd64.whl
Algorithm Hash digest
SHA256 538d30cd96ed7d1416d3956f94d54e426a8daf7c14527f6e0d6d425fcb4cca52
MD5 2927956f752e8ae3a393548c9b91e67b
BLAKE2b-256 044d80e04f4e27ab0cbc9096e2d10696da6d9c26a39b60db52670fd57614fea5

See more details on using hashes here.

File details

Details for the file regex-2024.7.24-cp311-cp311-win32.whl.

File metadata

  • Download URL: regex-2024.7.24-cp311-cp311-win32.whl
  • Upload date:
  • Size: 257.7 kB
  • Tags: CPython 3.11, Windows x86
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/5.1.0 CPython/3.12.4

File hashes

Hashes for regex-2024.7.24-cp311-cp311-win32.whl
Algorithm Hash digest
SHA256 2dfbb8baf8ba2c2b9aa2807f44ed272f0913eeeba002478c4577b8d29cde215c
MD5 66e9c0c2453c0228272075d363a57262
BLAKE2b-256 f27270ade7b0b5fe5c6df38fdfa2a5a8273e3ea6a10b772aa671b7e889e78bae

See more details on using hashes here.

File details

Details for the file regex-2024.7.24-cp311-cp311-musllinux_1_2_x86_64.whl.

File metadata

File hashes

Hashes for regex-2024.7.24-cp311-cp311-musllinux_1_2_x86_64.whl
Algorithm Hash digest
SHA256 c918b7a1e26b4ab40409820ddccc5d49871a82329640f5005f73572d5eaa9b5e
MD5 308b8e8cda14ea7f4bd5bedc802f6aae
BLAKE2b-256 f352bff76de2f6e2bc05edce3abeb7e98e6309aa022fc06071100a0216fbeb50

See more details on using hashes here.

File details

Details for the file regex-2024.7.24-cp311-cp311-musllinux_1_2_s390x.whl.

File metadata

File hashes

Hashes for regex-2024.7.24-cp311-cp311-musllinux_1_2_s390x.whl
Algorithm Hash digest
SHA256 871e3ab2838fbcb4e0865a6e01233975df3a15e6fce93b6f99d75cacbd9862d1
MD5 9b490e82cf26a18c041bad33dc784777
BLAKE2b-256 68231868e40d6b594843fd1a3498ffe75d58674edfc90d95e18dd87865b93bf2

See more details on using hashes here.

File details

Details for the file regex-2024.7.24-cp311-cp311-musllinux_1_2_ppc64le.whl.

File metadata

File hashes

Hashes for regex-2024.7.24-cp311-cp311-musllinux_1_2_ppc64le.whl
Algorithm Hash digest
SHA256 f6442f0f0ff81775eaa5b05af8a0ffa1dda36e9cf6ec1e0d3d245e8564b684ce
MD5 240756217460fc467618604853604ac5
BLAKE2b-256 e5fe4ceabf4382e44e1e096ac46fd5e3bca490738b24157116a48270fd542e88

See more details on using hashes here.

File details

Details for the file regex-2024.7.24-cp311-cp311-musllinux_1_2_i686.whl.

File metadata

File hashes

Hashes for regex-2024.7.24-cp311-cp311-musllinux_1_2_i686.whl
Algorithm Hash digest
SHA256 01b689e887f612610c869421241e075c02f2e3d1ae93a037cb14f88ab6a8934c
MD5 3c62f28faa921cd589b70ce97b1eec06
BLAKE2b-256 8f64565ff6cf241586ab7ae76bb4138c4d29bc1d1780973b457c2db30b21809a

See more details on using hashes here.

File details

Details for the file regex-2024.7.24-cp311-cp311-musllinux_1_2_aarch64.whl.

File metadata

File hashes

Hashes for regex-2024.7.24-cp311-cp311-musllinux_1_2_aarch64.whl
Algorithm Hash digest
SHA256 7e37e809b9303ec3a179085415cb5f418ecf65ec98cdfe34f6a078b46ef823ee
MD5 c4d9d6de86404061204e97c6119f1869
BLAKE2b-256 1b0f50b97ee1fc6965744b9e943b5c0f3740792ab54792df73d984510964ef29

See more details on using hashes here.

File details

Details for the file regex-2024.7.24-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl.

File metadata

File hashes

Hashes for regex-2024.7.24-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl
Algorithm Hash digest
SHA256 994448ee01864501912abf2bad9203bffc34158e80fe8bfb5b031f4f8e16da51
MD5 b2c0b0329626330aa153a7094d437000
BLAKE2b-256 8b7792d4a14530900d46dddc57b728eea65d723cc9fcfd07b96c2c141dabba84

See more details on using hashes here.

File details

Details for the file regex-2024.7.24-cp311-cp311-manylinux_2_17_s390x.manylinux2014_s390x.whl.

File metadata

File hashes

Hashes for regex-2024.7.24-cp311-cp311-manylinux_2_17_s390x.manylinux2014_s390x.whl
Algorithm Hash digest
SHA256 45104baae8b9f67569f0f1dca5e1f1ed77a54ae1cd8b0b07aba89272710db61e
MD5 dfc52c7c340ebff89c2f990aadd4ed8d
BLAKE2b-256 4a80bc3b9d31bd47ff578758af929af0ac1d6169b247e26fa6e87764007f3d93

See more details on using hashes here.

File details

Details for the file regex-2024.7.24-cp311-cp311-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl.

File metadata

File hashes

Hashes for regex-2024.7.24-cp311-cp311-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl
Algorithm Hash digest
SHA256 eb563dd3aea54c797adf513eeec819c4213d7dbfc311874eb4fd28d10f2ff0f2
MD5 dfa5372feab8101c393cdb34ac16a193
BLAKE2b-256 75f813b111fab93e6273e26de2926345e5ecf6ddad1e44c4d419d7b0924f9c52

See more details on using hashes here.

File details

Details for the file regex-2024.7.24-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl.

File metadata

File hashes

Hashes for regex-2024.7.24-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl
Algorithm Hash digest
SHA256 a2ec4419a3fe6cf8a4795752596dfe0adb4aea40d3683a132bae9c30b81e8d73
MD5 f3fc18b191664d89e1651e3c8d45ec52
BLAKE2b-256 91034603ec057c0bafd2f6f50b0bdda4b12a0ff81022decf1de007b485c356a6

See more details on using hashes here.

File details

Details for the file regex-2024.7.24-cp311-cp311-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl.

File metadata

File hashes

Hashes for regex-2024.7.24-cp311-cp311-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl
Algorithm Hash digest
SHA256 3fac296f99283ac232d8125be932c5cd7644084a30748fda013028c815ba3364
MD5 4ffcc3c5b99b5fd6993f58d1fcf0b567
BLAKE2b-256 355806695fd8afad4c8ed0a53ec5e222156398b9fe5afd58887ab94ea68e4d16

See more details on using hashes here.

File details

Details for the file regex-2024.7.24-cp311-cp311-macosx_11_0_arm64.whl.

File metadata

File hashes

Hashes for regex-2024.7.24-cp311-cp311-macosx_11_0_arm64.whl
Algorithm Hash digest
SHA256 3d974d24edb231446f708c455fd08f94c41c1ff4f04bcf06e5f36df5ef50b95a
MD5 a212ab18ea46c574b41eb0d9a1a78432
BLAKE2b-256 fc1b256ca4e2d5041c0aa2f1dc222f04412b796346ab9ce2aa5147405a9457b4

See more details on using hashes here.

File details

Details for the file regex-2024.7.24-cp311-cp311-macosx_10_9_x86_64.whl.

File metadata

File hashes

Hashes for regex-2024.7.24-cp311-cp311-macosx_10_9_x86_64.whl
Algorithm Hash digest
SHA256 4fdd1384619f406ad9037fe6b6eaa3de2749e2e12084abc80169e8e075377d3b
MD5 fa386f581b990ee0b37c9d2dcce756e1
BLAKE2b-256 f047f33b1cac88841f95fff862476a9e875d9a10dae6912a675c6f13c128e5d9

See more details on using hashes here.

File details

Details for the file regex-2024.7.24-cp311-cp311-macosx_10_9_universal2.whl.

File metadata

File hashes

Hashes for regex-2024.7.24-cp311-cp311-macosx_10_9_universal2.whl
Algorithm Hash digest
SHA256 382281306e3adaaa7b8b9ebbb3ffb43358a7bbf585fa93821300a418bb975281
MD5 c4a980760759a4fc90121991afce7402
BLAKE2b-256 cbec261f8434a47685d61e59a4ef3d9ce7902af521219f3ebd2194c7adb171a6

See more details on using hashes here.

File details

Details for the file regex-2024.7.24-cp310-cp310-win_amd64.whl.

File metadata

  • Download URL: regex-2024.7.24-cp310-cp310-win_amd64.whl
  • Upload date:
  • Size: 269.7 kB
  • Tags: CPython 3.10, Windows x86-64
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/5.1.0 CPython/3.12.4

File hashes

Hashes for regex-2024.7.24-cp310-cp310-win_amd64.whl
Algorithm Hash digest
SHA256 6b9fc7e9cc983e75e2518496ba1afc524227c163e43d706688a6bb9eca41617e
MD5 f2cfb1f81330762ef1fa490c8c350d34
BLAKE2b-256 fbcc6485c2fc72d0de9b55392246b80921639f1be62bed1e33e982940306b5ba

See more details on using hashes here.

File details

Details for the file regex-2024.7.24-cp310-cp310-win32.whl.

File metadata

  • Download URL: regex-2024.7.24-cp310-cp310-win32.whl
  • Upload date:
  • Size: 257.7 kB
  • Tags: CPython 3.10, Windows x86
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/5.1.0 CPython/3.12.4

File hashes

Hashes for regex-2024.7.24-cp310-cp310-win32.whl
Algorithm Hash digest
SHA256 fb168b5924bef397b5ba13aabd8cf5df7d3d93f10218d7b925e360d436863f66
MD5 ff491e5978ebbaf69fe4aba8e9c7dc5f
BLAKE2b-256 8254e24a8adfca74f9a421cd47657c51413919e7755e729608de6f4c5556e002

See more details on using hashes here.

File details

Details for the file regex-2024.7.24-cp310-cp310-musllinux_1_2_x86_64.whl.

File metadata

File hashes

Hashes for regex-2024.7.24-cp310-cp310-musllinux_1_2_x86_64.whl
Algorithm Hash digest
SHA256 416c0e4f56308f34cdb18c3f59849479dde5b19febdcd6e6fa4d04b6c31c9faa
MD5 9ba36cf2f989b3834c6df86bc132f299
BLAKE2b-256 36fd822110cc14b99bdd7d8c61487bc774f454120cd3d7492935bf13f3399716

See more details on using hashes here.

File details

Details for the file regex-2024.7.24-cp310-cp310-musllinux_1_2_s390x.whl.

File metadata

File hashes

Hashes for regex-2024.7.24-cp310-cp310-musllinux_1_2_s390x.whl
Algorithm Hash digest
SHA256 18300a1d78cf1290fa583cd8b7cde26ecb73e9f5916690cf9d42de569c89b1ce
MD5 721cb28e209b408cc81392b5b55797c6
BLAKE2b-256 e82391b04dbf51a2c0ddf5b1e055e9e05ed091ebcf46f2b0e6e3d2fff121f903

See more details on using hashes here.

File details

Details for the file regex-2024.7.24-cp310-cp310-musllinux_1_2_ppc64le.whl.

File metadata

File hashes

Hashes for regex-2024.7.24-cp310-cp310-musllinux_1_2_ppc64le.whl
Algorithm Hash digest
SHA256 c0abb5e4e8ce71a61d9446040c1e86d4e6d23f9097275c5bd49ed978755ff0fe
MD5 8ff8556d5df3076de39329eebae0454c
BLAKE2b-256 abac38186431f7c1874e3f790669be933accf1090ee53aba0ab1a811ef38f07e

See more details on using hashes here.

File details

Details for the file regex-2024.7.24-cp310-cp310-musllinux_1_2_i686.whl.

File metadata

File hashes

Hashes for regex-2024.7.24-cp310-cp310-musllinux_1_2_i686.whl
Algorithm Hash digest
SHA256 a4997716674d36a82eab3e86f8fa77080a5d8d96a389a61ea1d0e3a94a582cf7
MD5 526679d8a0f69f1574ce000c7c014af3
BLAKE2b-256 9063b37152f25fe348aa31806bafa91df607d096e8f477fed9a5cf3de339dd5f

See more details on using hashes here.

File details

Details for the file regex-2024.7.24-cp310-cp310-musllinux_1_2_aarch64.whl.

File metadata

File hashes

Hashes for regex-2024.7.24-cp310-cp310-musllinux_1_2_aarch64.whl
Algorithm Hash digest
SHA256 6f51f9556785e5a203713f5efd9c085b4a45aecd2a42573e2b5041881b588d1f
MD5 8c98c7bb6845bf86cd193c85d3bb16e4
BLAKE2b-256 50be4e09d5bc8de176153f209c95ca4e64b9def1748d693694a95dd4401ee7be

See more details on using hashes here.

File details

Details for the file regex-2024.7.24-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl.

File metadata

File hashes

Hashes for regex-2024.7.24-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl
Algorithm Hash digest
SHA256 bf7a89eef64b5455835f5ed30254ec19bf41f7541cd94f266ab7cbd463f00c41
MD5 1813b188169c06b3717bc3e3fe44e344
BLAKE2b-256 3e6604b63f31580026c8b819aed7f171149177d10cfab27477ea8800a2268d50

See more details on using hashes here.

File details

Details for the file regex-2024.7.24-cp310-cp310-manylinux_2_17_s390x.manylinux2014_s390x.whl.

File metadata

File hashes

Hashes for regex-2024.7.24-cp310-cp310-manylinux_2_17_s390x.manylinux2014_s390x.whl
Algorithm Hash digest
SHA256 c414cbda77dbf13c3bc88b073a1a9f375c7b0cb5e115e15d4b73ec3a2fbc6f59
MD5 39d9f31b02b45d82848c50d7e69e9063
BLAKE2b-256 ae4101a073765d75427e24710af035d8f0a773b5cedf23f61b63e7ef2ce960d6

See more details on using hashes here.

File details

Details for the file regex-2024.7.24-cp310-cp310-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl.

File metadata

File hashes

Hashes for regex-2024.7.24-cp310-cp310-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl
Algorithm Hash digest
SHA256 65fd3d2e228cae024c411c5ccdffae4c315271eee4a8b839291f84f796b34eca
MD5 9f63d4576ad9f05f0f686a49c105efa4
BLAKE2b-256 d011d0a12e1cecc1d35bbcbeb99e2ddcb8c1b152b1b58e2ff55f50c3d762b09e

See more details on using hashes here.

File details

Details for the file regex-2024.7.24-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl.

File metadata

File hashes

Hashes for regex-2024.7.24-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl
Algorithm Hash digest
SHA256 23acc72f0f4e1a9e6e9843d6328177ae3074b4182167e34119ec7233dfeccf53
MD5 08e27afb1a50d8ab4819ec36db19e038
BLAKE2b-256 a6d493b4011cb83f9a66e0fa398b4d3c6d564d94b686dace676c66502b13dae9

See more details on using hashes here.

File details

Details for the file regex-2024.7.24-cp310-cp310-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_12_x86_64.manylinux2010_x86_64.whl.

File metadata

File hashes

Hashes for regex-2024.7.24-cp310-cp310-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_12_x86_64.manylinux2010_x86_64.whl
Algorithm Hash digest
SHA256 7a5486ca56c8869070a966321d5ab416ff0f83f30e0e2da1ab48815c8d165d46
MD5 734c9b242157181d42a493496d061fdb
BLAKE2b-256 244435769388845cdd7be97e1232a59446b738054b61bc9c92a3b0bacfaf7bb1

See more details on using hashes here.

File details

Details for the file regex-2024.7.24-cp310-cp310-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl.

File metadata

File hashes

Hashes for regex-2024.7.24-cp310-cp310-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl
Algorithm Hash digest
SHA256 19c65b00d42804e3fbea9708f0937d157e53429a39b7c61253ff15670ff62cb5
MD5 fb99b03e2ef4a4833625570df2727dcc
BLAKE2b-256 be490c08a7a232e4e26e17afeedf13f331224d9377dde4876ed6e21e4a584a5d

See more details on using hashes here.

File details

Details for the file regex-2024.7.24-cp310-cp310-macosx_11_0_arm64.whl.

File metadata

File hashes

Hashes for regex-2024.7.24-cp310-cp310-macosx_11_0_arm64.whl
Algorithm Hash digest
SHA256 f273674b445bcb6e4409bf8d1be67bc4b58e8b46fd0d560055d515b8830063cd
MD5 c41d2b96da356f4b258d3d01d87eba9f
BLAKE2b-256 e58acddcb7942d05ad9a427ad97ab29f1a62c0607ab72bdb2f3a26fc5b07ac0f

See more details on using hashes here.

File details

Details for the file regex-2024.7.24-cp310-cp310-macosx_10_9_x86_64.whl.

File metadata

File hashes

Hashes for regex-2024.7.24-cp310-cp310-macosx_10_9_x86_64.whl
Algorithm Hash digest
SHA256 3426de3b91d1bc73249042742f45c2148803c111d1175b283270177fdf669024
MD5 c138bbc3dc31ca07f52eb92bf3c9a22d
BLAKE2b-256 e48080bc4d7329d04ba519ebcaf26ae21d9e30d33934c458691177c623ceff70

See more details on using hashes here.

File details

Details for the file regex-2024.7.24-cp310-cp310-macosx_10_9_universal2.whl.

File metadata

File hashes

Hashes for regex-2024.7.24-cp310-cp310-macosx_10_9_universal2.whl
Algorithm Hash digest
SHA256 228b0d3f567fafa0633aee87f08b9276c7062da9616931382993c03808bb68ce
MD5 cebf71663cc5b9922ccdca9297b31a14
BLAKE2b-256 1697283bd32777e6c30a9bede976cd72ba4b9aa144dc0f0f462bd37fa1a86e01

See more details on using hashes here.

File details

Details for the file regex-2024.7.24-cp39-cp39-win_amd64.whl.

File metadata

  • Download URL: regex-2024.7.24-cp39-cp39-win_amd64.whl
  • Upload date:
  • Size: 269.7 kB
  • Tags: CPython 3.9, Windows x86-64
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/5.1.0 CPython/3.12.4

File hashes

Hashes for regex-2024.7.24-cp39-cp39-win_amd64.whl
Algorithm Hash digest
SHA256 7c479f5ae937ec9985ecaf42e2e10631551d909f203e31308c12d703922742f9
MD5 42b7a93b8b2f383ebec1521dc28de66a
BLAKE2b-256 7f61b60849cd13f26a25b7aa61a0118c86c76b933a032d38b4657f4baeaeab5b

See more details on using hashes here.

File details

Details for the file regex-2024.7.24-cp39-cp39-win32.whl.

File metadata

  • Download URL: regex-2024.7.24-cp39-cp39-win32.whl
  • Upload date:
  • Size: 257.7 kB
  • Tags: CPython 3.9, Windows x86
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/5.1.0 CPython/3.12.4

File hashes

Hashes for regex-2024.7.24-cp39-cp39-win32.whl
Algorithm Hash digest
SHA256 ca5b2028c2f7af4e13fb9fc29b28d0ce767c38c7facdf64f6c2cd040413055f1
MD5 0dfe494a2b6590566158ceea4876e693
BLAKE2b-256 9086865208eb0f0790d3e4c726d291acc5cbbfed4c5133a44dc99d7d746ff0bf

See more details on using hashes here.

File details

Details for the file regex-2024.7.24-cp39-cp39-musllinux_1_2_x86_64.whl.

File metadata

File hashes

Hashes for regex-2024.7.24-cp39-cp39-musllinux_1_2_x86_64.whl
Algorithm Hash digest
SHA256 84c312cdf839e8b579f504afcd7b65f35d60b6285d892b19adea16355e8343c9
MD5 908df58e11ae1d341a0cc9ea93c0271f
BLAKE2b-256 3c2aaf44a6747d1c331234f57d48cf2dcab221770cd755a7c16b5c358b485952

See more details on using hashes here.

File details

Details for the file regex-2024.7.24-cp39-cp39-musllinux_1_2_s390x.whl.

File metadata

File hashes

Hashes for regex-2024.7.24-cp39-cp39-musllinux_1_2_s390x.whl
Algorithm Hash digest
SHA256 44fc61b99035fd9b3b9453f1713234e5a7c92a04f3577252b45feefe1b327759
MD5 c7aa804692237509debb57e08e224256
BLAKE2b-256 44afe523b6e074f90c0471d25898916d05a1b7a774b259be192f8bc6683c5966

See more details on using hashes here.

File details

Details for the file regex-2024.7.24-cp39-cp39-musllinux_1_2_ppc64le.whl.

File metadata

File hashes

Hashes for regex-2024.7.24-cp39-cp39-musllinux_1_2_ppc64le.whl
Algorithm Hash digest
SHA256 ae2757ace61bc4061b69af19e4689fa4416e1a04840f33b441034202b5cd02d4
MD5 5bfb696dfe721fde36db640ec5b2677a
BLAKE2b-256 03d1629e72e8f04639e6fadfe67b8823cc94fdcd19192b0175bd086950fefca8

See more details on using hashes here.

File details

Details for the file regex-2024.7.24-cp39-cp39-musllinux_1_2_i686.whl.

File metadata

File hashes

Hashes for regex-2024.7.24-cp39-cp39-musllinux_1_2_i686.whl
Algorithm Hash digest
SHA256 fbf8c2f00904eaf63ff37718eb13acf8e178cb940520e47b2f05027f5bb34ce3
MD5 0c2c7e95896cf355564d52ff30142b86
BLAKE2b-256 288bf7fb2feb45e2c16e6e49c55979519c7ac76f3432267bf64d4aabd5d3b47b

See more details on using hashes here.

File details

Details for the file regex-2024.7.24-cp39-cp39-musllinux_1_2_aarch64.whl.

File metadata

File hashes

Hashes for regex-2024.7.24-cp39-cp39-musllinux_1_2_aarch64.whl
Algorithm Hash digest
SHA256 c5e69fd3eb0b409432b537fe3c6f44ac089c458ab6b78dcec14478422879ec5f
MD5 90800f4952da8a927b6b27e2b9f57359
BLAKE2b-256 46293561d53e0cb7a1d98385206a133988616637f98a4517ada9b714d6dff5c9

See more details on using hashes here.

File details

Details for the file regex-2024.7.24-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.whl.

File metadata

File hashes

Hashes for regex-2024.7.24-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.whl
Algorithm Hash digest
SHA256 836d3cc225b3e8a943d0b02633fb2f28a66e281290302a79df0e1eaa984ff7c1
MD5 0493c3c8a57e5642659d0f79365a9e5b
BLAKE2b-256 3667851cf82e2c47d46846cca15ba84f845e876257a54cb82f229d335cd5c67e

See more details on using hashes here.

File details

Details for the file regex-2024.7.24-cp39-cp39-manylinux_2_17_s390x.manylinux2014_s390x.whl.

File metadata

File hashes

Hashes for regex-2024.7.24-cp39-cp39-manylinux_2_17_s390x.manylinux2014_s390x.whl
Algorithm Hash digest
SHA256 b16582783f44fbca6fcf46f61347340c787d7530d88b4d590a397a47583f31dd
MD5 5cc686b8efc4582fcd399532b13fd1e4
BLAKE2b-256 0472fbab33403723b661cbfed09c635bf6ecfc07268df1a56555d19f6f0da6af

See more details on using hashes here.

File details

Details for the file regex-2024.7.24-cp39-cp39-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl.

File metadata

File hashes

Hashes for regex-2024.7.24-cp39-cp39-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl
Algorithm Hash digest
SHA256 04ce29e2c5fedf296b1a1b0acc1724ba93a36fb14031f3abfb7abda2806c1535
MD5 dea06e937a99bf8e60e137b64efaee10
BLAKE2b-256 9314a9123402a27d1a11d034cb51236a9f6e5ba01a38e8599ede95d46e4362fa

See more details on using hashes here.

File details

Details for the file regex-2024.7.24-cp39-cp39-manylinux_2_17_aarch64.manylinux2014_aarch64.whl.

File metadata

File hashes

Hashes for regex-2024.7.24-cp39-cp39-manylinux_2_17_aarch64.manylinux2014_aarch64.whl
Algorithm Hash digest
SHA256 d33a0021893ede5969876052796165bab6006559ab845fd7b515a30abdd990dc
MD5 7f88f69d0f2c5306831be3bac6e01b26
BLAKE2b-256 3a722667206ef348d8e4cdd349d6f0e064002e8d393b66093181d1a865b94a11

See more details on using hashes here.

File details

Details for the file regex-2024.7.24-cp39-cp39-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_12_x86_64.manylinux2010_x86_64.whl.

File metadata

File hashes

Hashes for regex-2024.7.24-cp39-cp39-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_12_x86_64.manylinux2010_x86_64.whl
Algorithm Hash digest
SHA256 973335b1624859cb0e52f96062a28aa18f3a5fc77a96e4a3d6d76e29811a0e6e
MD5 f0b8ea42675b27a887c5f11e06cbfe89
BLAKE2b-256 18fb1e35f8cfe3cd1a086449db7bbf91b6e0051b91ebb71e67915b1b01d3a3cf

See more details on using hashes here.

File details

Details for the file regex-2024.7.24-cp39-cp39-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl.

File metadata

File hashes

Hashes for regex-2024.7.24-cp39-cp39-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl
Algorithm Hash digest
SHA256 438d9f0f4bc64e8dea78274caa5af971ceff0f8771e1a2333620969936ba10be
MD5 f8a4d820bf1ac1940885c7f2d17e19e7
BLAKE2b-256 7f0219abc35bbc20f05d4a4147319923dc880c4005a01917d41b3340bf0f84ae

See more details on using hashes here.

File details

Details for the file regex-2024.7.24-cp39-cp39-macosx_11_0_arm64.whl.

File metadata

File hashes

Hashes for regex-2024.7.24-cp39-cp39-macosx_11_0_arm64.whl
Algorithm Hash digest
SHA256 33e2614a7ce627f0cdf2ad104797d1f68342d967de3695678c0cb84f530709f8
MD5 e989c1700bbe129f4b3322d11f8ee9b0
BLAKE2b-256 1458283c749340e4d7aad87a1fb93c6bf11f377a0da8aaff6f7f863b28050752

See more details on using hashes here.

File details

Details for the file regex-2024.7.24-cp39-cp39-macosx_10_9_x86_64.whl.

File metadata

File hashes

Hashes for regex-2024.7.24-cp39-cp39-macosx_10_9_x86_64.whl
Algorithm Hash digest
SHA256 25419b70ba00a16abc90ee5fce061228206173231f004437730b67ac77323f0d
MD5 873e59259897c4130057bd513bed6097
BLAKE2b-256 3dc9580ff2b99482ca90785e28720269f352a015f30430bb583ff7bcc519bb9a

See more details on using hashes here.

File details

Details for the file regex-2024.7.24-cp39-cp39-macosx_10_9_universal2.whl.

File metadata

File hashes

Hashes for regex-2024.7.24-cp39-cp39-macosx_10_9_universal2.whl
Algorithm Hash digest
SHA256 0ffe3f9d430cd37d8fa5632ff6fb36d5b24818c5c986893063b4e5bdb84cdf24
MD5 51a683825712c170b14e543879ea9b48
BLAKE2b-256 dcc678f26fe25efb7bec46028eff4db9fae07852defc7d2fe48fcbdba47ff3d1

See more details on using hashes here.

File details

Details for the file regex-2024.7.24-cp38-cp38-win_amd64.whl.

File metadata

  • Download URL: regex-2024.7.24-cp38-cp38-win_amd64.whl
  • Upload date:
  • Size: 269.7 kB
  • Tags: CPython 3.8, Windows x86-64
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/5.1.0 CPython/3.12.4

File hashes

Hashes for regex-2024.7.24-cp38-cp38-win_amd64.whl
Algorithm Hash digest
SHA256 8fd5afd101dcf86a270d254364e0e8dddedebe6bd1ab9d5f732f274fa00499a5
MD5 0c7991e4c6940d8d2ffa98c2ffeb7d2a
BLAKE2b-256 8b07804cfdd3a562220861801824e7ca2b301ba46d897a43ed1036da735e616f

See more details on using hashes here.

File details

Details for the file regex-2024.7.24-cp38-cp38-win32.whl.

File metadata

  • Download URL: regex-2024.7.24-cp38-cp38-win32.whl
  • Upload date:
  • Size: 257.7 kB
  • Tags: CPython 3.8, Windows x86
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/5.1.0 CPython/3.12.4

File hashes

Hashes for regex-2024.7.24-cp38-cp38-win32.whl
Algorithm Hash digest
SHA256 d0a07763776188b4db4c9c7fb1b8c494049f84659bb387b71c73bbc07f189e96
MD5 5ca8c5a4e6c58af5fc928643347ab03d
BLAKE2b-256 39766f67fff0378b6133aafb931ce5f2146e10f8cd182b387ffc3d46504a456a

See more details on using hashes here.

File details

Details for the file regex-2024.7.24-cp38-cp38-musllinux_1_2_x86_64.whl.

File metadata

File hashes

Hashes for regex-2024.7.24-cp38-cp38-musllinux_1_2_x86_64.whl
Algorithm Hash digest
SHA256 c51edc3541e11fbe83f0c4d9412ef6c79f664a3745fab261457e84465ec9d5a8
MD5 41c112272b4bd7dff1ba1f2c5667882d
BLAKE2b-256 105f1cc3f2b37e4276eb94ac550beb91a22b0cb57a65996a74c74f3a6356d25e

See more details on using hashes here.

File details

Details for the file regex-2024.7.24-cp38-cp38-musllinux_1_2_s390x.whl.

File metadata

File hashes

Hashes for regex-2024.7.24-cp38-cp38-musllinux_1_2_s390x.whl
Algorithm Hash digest
SHA256 3f3b6ca8eae6d6c75a6cff525c8530c60e909a71a15e1b731723233331de4169
MD5 4e595db8a51ce6cd09b5101d4b2bb55b
BLAKE2b-256 43a1ee247d522835b1fcaff7e19bb3d931870ec97ca166c0cd924d02975f83bb

See more details on using hashes here.

File details

Details for the file regex-2024.7.24-cp38-cp38-musllinux_1_2_ppc64le.whl.

File metadata

File hashes

Hashes for regex-2024.7.24-cp38-cp38-musllinux_1_2_ppc64le.whl
Algorithm Hash digest
SHA256 8bc593dcce679206b60a538c302d03c29b18e3d862609317cb560e18b66d10cf
MD5 3adb3faab9c143e41042f76643e06a14
BLAKE2b-256 30ba11c77fef8f1339286a8c8849d1860730a661f3977569273a5ad7a88e3d22

See more details on using hashes here.

File details

Details for the file regex-2024.7.24-cp38-cp38-musllinux_1_2_i686.whl.

File metadata

File hashes

Hashes for regex-2024.7.24-cp38-cp38-musllinux_1_2_i686.whl
Algorithm Hash digest
SHA256 945352286a541406f99b2655c973852da7911b3f4264e010218bbc1cc73168f2
MD5 9b4459c2351c924810906fbee94c7713
BLAKE2b-256 d7acdafa865a0e1b9431375d94c522946b2f00c438a84f69eaa59b96b410595b

See more details on using hashes here.

File details

Details for the file regex-2024.7.24-cp38-cp38-musllinux_1_2_aarch64.whl.

File metadata

File hashes

Hashes for regex-2024.7.24-cp38-cp38-musllinux_1_2_aarch64.whl
Algorithm Hash digest
SHA256 c9bb87fdf2ab2370f21e4d5636e5317775e5d51ff32ebff2cf389f71b9b13750
MD5 ced2178b460af62cad359f8a545c3bbb
BLAKE2b-256 96dd375480c0e52c55579383094b7b311674ae4315f7669eae779a4f87d72c99

See more details on using hashes here.

File details

Details for the file regex-2024.7.24-cp38-cp38-manylinux_2_17_x86_64.manylinux2014_x86_64.whl.

File metadata

File hashes

Hashes for regex-2024.7.24-cp38-cp38-manylinux_2_17_x86_64.manylinux2014_x86_64.whl
Algorithm Hash digest
SHA256 dac8e84fff5d27420f3c1e879ce9929108e873667ec87e0c8eeb413a5311adfe
MD5 8544137c29e6df66b728949ce307d25d
BLAKE2b-256 c2c6023e5b634e5b72034f9e0c36396648e1481f3482c739d1b456b3e5061243

See more details on using hashes here.

File details

Details for the file regex-2024.7.24-cp38-cp38-manylinux_2_17_s390x.manylinux2014_s390x.whl.

File metadata

File hashes

Hashes for regex-2024.7.24-cp38-cp38-manylinux_2_17_s390x.manylinux2014_s390x.whl
Algorithm Hash digest
SHA256 68a8f8c046c6466ac61a36b65bb2395c74451df2ffb8458492ef49900efed293
MD5 bb86289fd4a49503eb37f136c776ffe3
BLAKE2b-256 7ec5bfca64061b12e0c127cdd4020e776eb452433b87fc24ddb802c09d63a915

See more details on using hashes here.

File details

Details for the file regex-2024.7.24-cp38-cp38-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl.

File metadata

File hashes

Hashes for regex-2024.7.24-cp38-cp38-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl
Algorithm Hash digest
SHA256 a82465ebbc9b1c5c50738536fdfa7cab639a261a99b469c9d4c7dcbb2b3f1e57
MD5 0fe289d67c4107c49fe55610d38c4d76
BLAKE2b-256 05f731578070044c74f0e88ac40c4b4407d3ba6efc346e57895bf7a3c7fdedbe

See more details on using hashes here.

File details

Details for the file regex-2024.7.24-cp38-cp38-manylinux_2_17_aarch64.manylinux2014_aarch64.whl.

File metadata

File hashes

Hashes for regex-2024.7.24-cp38-cp38-manylinux_2_17_aarch64.manylinux2014_aarch64.whl
Algorithm Hash digest
SHA256 eb462f0e346fcf41a901a126b50f8781e9a474d3927930f3490f38a6e73b6950
MD5 2baee965b69f3fb61fb9e14d17ad7730
BLAKE2b-256 19b0d65b9ccafdfcdd0ee26ba8ad704bc14927e732a000d5b78ea3e78d63ac5c

See more details on using hashes here.

File details

Details for the file regex-2024.7.24-cp38-cp38-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_12_x86_64.manylinux2010_x86_64.whl.

File metadata

File hashes

Hashes for regex-2024.7.24-cp38-cp38-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_12_x86_64.manylinux2010_x86_64.whl
Algorithm Hash digest
SHA256 43affe33137fcd679bdae93fb25924979517e011f9dea99163f80b82eadc7e53
MD5 ee5577d0a0bd5fd363862c3128919ea9
BLAKE2b-256 4f62df52e036646592cb6cb4364fe6a51f2e80f8f78c464be923050fa12406f7

See more details on using hashes here.

File details

Details for the file regex-2024.7.24-cp38-cp38-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl.

File metadata

File hashes

Hashes for regex-2024.7.24-cp38-cp38-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl
Algorithm Hash digest
SHA256 ba2537ef2163db9e6ccdbeb6f6424282ae4dea43177402152c67ef869cf3978b
MD5 6e8020747e6d65e6811635deeb00b4d8
BLAKE2b-256 3615b9e33cb1a64953af2179141329a06019630e18953ce80d7371b150596737

See more details on using hashes here.

File details

Details for the file regex-2024.7.24-cp38-cp38-macosx_11_0_arm64.whl.

File metadata

File hashes

Hashes for regex-2024.7.24-cp38-cp38-macosx_11_0_arm64.whl
Algorithm Hash digest
SHA256 64bd50cf16bcc54b274e20235bf8edbb64184a30e1e53873ff8d444e7ac656b2
MD5 9f92d6a5ec4a9aba831e228205a3668e
BLAKE2b-256 71cb1cafb0c7cca13bf1d1a5ae4f45d6c0c86014806adb5dad846ea739661e8b

See more details on using hashes here.

File details

Details for the file regex-2024.7.24-cp38-cp38-macosx_10_9_x86_64.whl.

File metadata

File hashes

Hashes for regex-2024.7.24-cp38-cp38-macosx_10_9_x86_64.whl
Algorithm Hash digest
SHA256 88ecc3afd7e776967fa16c80f974cb79399ee8dc6c96423321d6f7d4b881c92b
MD5 e23220ef69b2a8845883c170b4995ad5
BLAKE2b-256 53b0ca1e11e5ae45e00f21f161411c906bb8178f5b8c74eddcf80f2e54c8fee4

See more details on using hashes here.

File details

Details for the file regex-2024.7.24-cp38-cp38-macosx_10_9_universal2.whl.

File metadata

File hashes

Hashes for regex-2024.7.24-cp38-cp38-macosx_10_9_universal2.whl
Algorithm Hash digest
SHA256 66b4c0731a5c81921e938dcf1a88e978264e26e6ac4ec96a4d21ae0354581ae0
MD5 114c3de5d04fa32809152cbc80b0e83a
BLAKE2b-256 955a4bc07e690a6500e6249a9ae0f8b92431402a608e652eb43a95583d485e92

See more details on using hashes here.

Supported by

AWS Cloud computing and Security Sponsor Datadog Monitoring Depot Continuous Integration Fastly CDN Google Download Analytics Pingdom Monitoring Sentry Error logging StatusPage Status page