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.

Note

The re module’s behaviour with zero-width matches changed in Python 3.7, and this module follows that behaviour when compiled for Python 3.7.

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 14.0.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?

# Python 3.7 and later
>>> regex.sub('.*', 'x', 'test')
'xx'
>>> regex.sub('.*?', '|', 'test')
'|||||||||'

# Python 3.6 and earlier
>>> regex.sub('(?V0).*', 'x', 'test')
'x'
>>> regex.sub('(?V1).*', 'x', 'test')
'xx'
>>> regex.sub('(?V0).*?', '|', 'test')
'|t|e|s|t|'
>>> regex.sub('(?V1).*?', '|', '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-2022.8.17.tar.gz (385.8 kB view details)

Uploaded Source

Built Distributions

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

regex-2022.8.17-cp310-cp310-win_amd64.whl (263.0 kB view details)

Uploaded CPython 3.10Windows x86-64

regex-2022.8.17-cp310-cp310-win32.whl (251.4 kB view details)

Uploaded CPython 3.10Windows x86

regex-2022.8.17-cp310-cp310-musllinux_1_1_x86_64.whl (735.3 kB view details)

Uploaded CPython 3.10musllinux: musl 1.1+ x86-64

regex-2022.8.17-cp310-cp310-musllinux_1_1_s390x.whl (758.6 kB view details)

Uploaded CPython 3.10musllinux: musl 1.1+ s390x

regex-2022.8.17-cp310-cp310-musllinux_1_1_ppc64le.whl (757.9 kB view details)

Uploaded CPython 3.10musllinux: musl 1.1+ ppc64le

regex-2022.8.17-cp310-cp310-musllinux_1_1_i686.whl (724.3 kB view details)

Uploaded CPython 3.10musllinux: musl 1.1+ i686

regex-2022.8.17-cp310-cp310-musllinux_1_1_aarch64.whl (736.0 kB view details)

Uploaded CPython 3.10musllinux: musl 1.1+ ARM64

regex-2022.8.17-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl (766.5 kB view details)

Uploaded CPython 3.10manylinux: glibc 2.17+ x86-64

regex-2022.8.17-cp310-cp310-manylinux_2_17_s390x.manylinux2014_s390x.whl (791.3 kB view details)

Uploaded CPython 3.10manylinux: glibc 2.17+ s390x

regex-2022.8.17-cp310-cp310-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl (805.7 kB view details)

Uploaded CPython 3.10manylinux: glibc 2.17+ ppc64le

regex-2022.8.17-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl (765.5 kB view details)

Uploaded CPython 3.10manylinux: glibc 2.17+ ARM64

regex-2022.8.17-cp310-cp310-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_12_x86_64.manylinux2010_x86_64.whl (680.9 kB view details)

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

regex-2022.8.17-cp310-cp310-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl (753.5 kB view details)

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

regex-2022.8.17-cp310-cp310-macosx_11_0_arm64.whl (283.0 kB view details)

Uploaded CPython 3.10macOS 11.0+ ARM64

regex-2022.8.17-cp310-cp310-macosx_10_9_x86_64.whl (290.1 kB view details)

Uploaded CPython 3.10macOS 10.9+ x86-64

regex-2022.8.17-cp39-cp39-win_amd64.whl (263.1 kB view details)

Uploaded CPython 3.9Windows x86-64

regex-2022.8.17-cp39-cp39-win32.whl (251.4 kB view details)

Uploaded CPython 3.9Windows x86

regex-2022.8.17-cp39-cp39-musllinux_1_1_x86_64.whl (735.2 kB view details)

Uploaded CPython 3.9musllinux: musl 1.1+ x86-64

regex-2022.8.17-cp39-cp39-musllinux_1_1_s390x.whl (758.2 kB view details)

Uploaded CPython 3.9musllinux: musl 1.1+ s390x

regex-2022.8.17-cp39-cp39-musllinux_1_1_ppc64le.whl (757.4 kB view details)

Uploaded CPython 3.9musllinux: musl 1.1+ ppc64le

regex-2022.8.17-cp39-cp39-musllinux_1_1_i686.whl (723.9 kB view details)

Uploaded CPython 3.9musllinux: musl 1.1+ i686

regex-2022.8.17-cp39-cp39-musllinux_1_1_aarch64.whl (735.3 kB view details)

Uploaded CPython 3.9musllinux: musl 1.1+ ARM64

regex-2022.8.17-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.whl (765.9 kB view details)

Uploaded CPython 3.9manylinux: glibc 2.17+ x86-64

regex-2022.8.17-cp39-cp39-manylinux_2_17_s390x.manylinux2014_s390x.whl (790.7 kB view details)

Uploaded CPython 3.9manylinux: glibc 2.17+ s390x

regex-2022.8.17-cp39-cp39-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl (805.2 kB view details)

Uploaded CPython 3.9manylinux: glibc 2.17+ ppc64le

regex-2022.8.17-cp39-cp39-manylinux_2_17_aarch64.manylinux2014_aarch64.whl (764.8 kB view details)

Uploaded CPython 3.9manylinux: glibc 2.17+ ARM64

regex-2022.8.17-cp39-cp39-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_12_x86_64.manylinux2010_x86_64.whl (680.3 kB view details)

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

regex-2022.8.17-cp39-cp39-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl (753.0 kB view details)

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

regex-2022.8.17-cp39-cp39-macosx_11_0_arm64.whl (283.0 kB view details)

Uploaded CPython 3.9macOS 11.0+ ARM64

regex-2022.8.17-cp39-cp39-macosx_10_9_x86_64.whl (290.1 kB view details)

Uploaded CPython 3.9macOS 10.9+ x86-64

regex-2022.8.17-cp38-cp38-win_amd64.whl (263.0 kB view details)

Uploaded CPython 3.8Windows x86-64

regex-2022.8.17-cp38-cp38-win32.whl (251.4 kB view details)

Uploaded CPython 3.8Windows x86

regex-2022.8.17-cp38-cp38-musllinux_1_1_x86_64.whl (742.7 kB view details)

Uploaded CPython 3.8musllinux: musl 1.1+ x86-64

regex-2022.8.17-cp38-cp38-musllinux_1_1_s390x.whl (762.9 kB view details)

Uploaded CPython 3.8musllinux: musl 1.1+ s390x

regex-2022.8.17-cp38-cp38-musllinux_1_1_ppc64le.whl (763.1 kB view details)

Uploaded CPython 3.8musllinux: musl 1.1+ ppc64le

regex-2022.8.17-cp38-cp38-musllinux_1_1_i686.whl (728.1 kB view details)

Uploaded CPython 3.8musllinux: musl 1.1+ i686

regex-2022.8.17-cp38-cp38-musllinux_1_1_aarch64.whl (739.1 kB view details)

Uploaded CPython 3.8musllinux: musl 1.1+ ARM64

regex-2022.8.17-cp38-cp38-manylinux_2_17_x86_64.manylinux2014_x86_64.whl (768.9 kB view details)

Uploaded CPython 3.8manylinux: glibc 2.17+ x86-64

regex-2022.8.17-cp38-cp38-manylinux_2_17_s390x.manylinux2014_s390x.whl (792.6 kB view details)

Uploaded CPython 3.8manylinux: glibc 2.17+ s390x

regex-2022.8.17-cp38-cp38-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl (807.8 kB view details)

Uploaded CPython 3.8manylinux: glibc 2.17+ ppc64le

regex-2022.8.17-cp38-cp38-manylinux_2_17_aarch64.manylinux2014_aarch64.whl (766.9 kB view details)

Uploaded CPython 3.8manylinux: glibc 2.17+ ARM64

regex-2022.8.17-cp38-cp38-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_12_x86_64.manylinux2010_x86_64.whl (686.1 kB view details)

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

regex-2022.8.17-cp38-cp38-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl (755.9 kB view details)

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

regex-2022.8.17-cp38-cp38-macosx_11_0_arm64.whl (283.0 kB view details)

Uploaded CPython 3.8macOS 11.0+ ARM64

regex-2022.8.17-cp38-cp38-macosx_10_9_x86_64.whl (290.2 kB view details)

Uploaded CPython 3.8macOS 10.9+ x86-64

regex-2022.8.17-cp37-cp37m-win_amd64.whl (263.3 kB view details)

Uploaded CPython 3.7mWindows x86-64

regex-2022.8.17-cp37-cp37m-win32.whl (250.8 kB view details)

Uploaded CPython 3.7mWindows x86

regex-2022.8.17-cp37-cp37m-musllinux_1_1_x86_64.whl (726.7 kB view details)

Uploaded CPython 3.7mmusllinux: musl 1.1+ x86-64

regex-2022.8.17-cp37-cp37m-musllinux_1_1_s390x.whl (750.0 kB view details)

Uploaded CPython 3.7mmusllinux: musl 1.1+ s390x

regex-2022.8.17-cp37-cp37m-musllinux_1_1_ppc64le.whl (749.0 kB view details)

Uploaded CPython 3.7mmusllinux: musl 1.1+ ppc64le

regex-2022.8.17-cp37-cp37m-musllinux_1_1_i686.whl (714.0 kB view details)

Uploaded CPython 3.7mmusllinux: musl 1.1+ i686

regex-2022.8.17-cp37-cp37m-musllinux_1_1_aarch64.whl (725.1 kB view details)

Uploaded CPython 3.7mmusllinux: musl 1.1+ ARM64

regex-2022.8.17-cp37-cp37m-manylinux_2_17_x86_64.manylinux2014_x86_64.whl (752.6 kB view details)

Uploaded CPython 3.7mmanylinux: glibc 2.17+ x86-64

regex-2022.8.17-cp37-cp37m-manylinux_2_17_s390x.manylinux2014_s390x.whl (777.8 kB view details)

Uploaded CPython 3.7mmanylinux: glibc 2.17+ s390x

regex-2022.8.17-cp37-cp37m-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl (790.7 kB view details)

Uploaded CPython 3.7mmanylinux: glibc 2.17+ ppc64le

regex-2022.8.17-cp37-cp37m-manylinux_2_17_aarch64.manylinux2014_aarch64.whl (748.4 kB view details)

Uploaded CPython 3.7mmanylinux: glibc 2.17+ ARM64

regex-2022.8.17-cp37-cp37m-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_12_x86_64.manylinux2010_x86_64.whl (673.0 kB view details)

Uploaded CPython 3.7mmanylinux: glibc 2.12+ x86-64manylinux: glibc 2.5+ x86-64

regex-2022.8.17-cp37-cp37m-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl (738.8 kB view details)

Uploaded CPython 3.7mmanylinux: glibc 2.17+ i686manylinux: glibc 2.5+ i686

regex-2022.8.17-cp37-cp37m-macosx_10_9_x86_64.whl (290.5 kB view details)

Uploaded CPython 3.7mmacOS 10.9+ x86-64

regex-2022.8.17-cp36-cp36m-win_amd64.whl (275.1 kB view details)

Uploaded CPython 3.6mWindows x86-64

regex-2022.8.17-cp36-cp36m-win32.whl (257.9 kB view details)

Uploaded CPython 3.6mWindows x86

regex-2022.8.17-cp36-cp36m-musllinux_1_1_x86_64.whl (725.6 kB view details)

Uploaded CPython 3.6mmusllinux: musl 1.1+ x86-64

regex-2022.8.17-cp36-cp36m-musllinux_1_1_s390x.whl (747.0 kB view details)

Uploaded CPython 3.6mmusllinux: musl 1.1+ s390x

regex-2022.8.17-cp36-cp36m-musllinux_1_1_ppc64le.whl (747.3 kB view details)

Uploaded CPython 3.6mmusllinux: musl 1.1+ ppc64le

regex-2022.8.17-cp36-cp36m-musllinux_1_1_i686.whl (714.3 kB view details)

Uploaded CPython 3.6mmusllinux: musl 1.1+ i686

regex-2022.8.17-cp36-cp36m-musllinux_1_1_aarch64.whl (722.7 kB view details)

Uploaded CPython 3.6mmusllinux: musl 1.1+ ARM64

regex-2022.8.17-cp36-cp36m-manylinux_2_17_x86_64.manylinux2014_x86_64.whl (751.8 kB view details)

Uploaded CPython 3.6mmanylinux: glibc 2.17+ x86-64

regex-2022.8.17-cp36-cp36m-manylinux_2_17_s390x.manylinux2014_s390x.whl (778.2 kB view details)

Uploaded CPython 3.6mmanylinux: glibc 2.17+ s390x

regex-2022.8.17-cp36-cp36m-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl (791.0 kB view details)

Uploaded CPython 3.6mmanylinux: glibc 2.17+ ppc64le

regex-2022.8.17-cp36-cp36m-manylinux_2_17_aarch64.manylinux2014_aarch64.whl (749.6 kB view details)

Uploaded CPython 3.6mmanylinux: glibc 2.17+ ARM64

regex-2022.8.17-cp36-cp36m-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_12_x86_64.manylinux2010_x86_64.whl (673.3 kB view details)

Uploaded CPython 3.6mmanylinux: glibc 2.12+ x86-64manylinux: glibc 2.5+ x86-64

regex-2022.8.17-cp36-cp36m-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl (738.8 kB view details)

Uploaded CPython 3.6mmanylinux: glibc 2.17+ i686manylinux: glibc 2.5+ i686

regex-2022.8.17-cp36-cp36m-macosx_10_9_x86_64.whl (290.6 kB view details)

Uploaded CPython 3.6mmacOS 10.9+ x86-64

File details

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

File metadata

  • Download URL: regex-2022.8.17.tar.gz
  • Upload date:
  • Size: 385.8 kB
  • Tags: Source
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/4.0.1 CPython/3.9.13

File hashes

Hashes for regex-2022.8.17.tar.gz
Algorithm Hash digest
SHA256 5c77eab46f3a2b2cd8bbe06467df783543bf7396df431eb4a144cc4b89e9fb3c
MD5 6b3c706a4d275af24f01496c10d516fa
BLAKE2b-256 f7e18b46ff54516faea4ea9469c4f5b50f2e9e73131f54d19e6827141698a822

See more details on using hashes here.

File details

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

File metadata

  • Download URL: regex-2022.8.17-cp310-cp310-win_amd64.whl
  • Upload date:
  • Size: 263.0 kB
  • Tags: CPython 3.10, Windows x86-64
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/4.0.1 CPython/3.9.13

File hashes

Hashes for regex-2022.8.17-cp310-cp310-win_amd64.whl
Algorithm Hash digest
SHA256 c4f6609f6e867a58cdf173e1cbe1f3736d25962108bd5cb01ad5a130875ff2c8
MD5 d34549fdf4bc5aad677df83dfb3d1f33
BLAKE2b-256 d3c96db67e53736fd4b411a4b6dbc2a8c4e96f7027a7b06cf09626971cf419d0

See more details on using hashes here.

File details

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

File metadata

  • Download URL: regex-2022.8.17-cp310-cp310-win32.whl
  • Upload date:
  • Size: 251.4 kB
  • Tags: CPython 3.10, Windows x86
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/4.0.1 CPython/3.9.13

File hashes

Hashes for regex-2022.8.17-cp310-cp310-win32.whl
Algorithm Hash digest
SHA256 5f14430535645712f546f1e07013507d1cc0c8abd851811dacce8c7fb584bf52
MD5 b604b2e50b739f09b0340ff1be0a0572
BLAKE2b-256 967499fb2fbf14cc0191a8ed3e66cd6b4ac90fae0fa5dcf396ce0626f9c0775d

See more details on using hashes here.

File details

Details for the file regex-2022.8.17-cp310-cp310-musllinux_1_1_x86_64.whl.

File metadata

File hashes

Hashes for regex-2022.8.17-cp310-cp310-musllinux_1_1_x86_64.whl
Algorithm Hash digest
SHA256 02b6dc102123f5178796dcdb5a90f6e88895607fd1a1d115d8de1af8161ca2b4
MD5 f4563bee5acb4af8a582fba270e2eff7
BLAKE2b-256 c30a3480bad89ee3515607ce783619d28375a5a81f119260118550d87634fec1

See more details on using hashes here.

File details

Details for the file regex-2022.8.17-cp310-cp310-musllinux_1_1_s390x.whl.

File metadata

File hashes

Hashes for regex-2022.8.17-cp310-cp310-musllinux_1_1_s390x.whl
Algorithm Hash digest
SHA256 6b30c8d299ba48ee919064628fd8bc296bdc6e4827d315491bea39437130d3e1
MD5 975fe7f4a4df6484a6ebe5d082d12957
BLAKE2b-256 0d4ac1595191bf84718c5e15d60a86428063ccd658d49a693a1df962a835bda9

See more details on using hashes here.

File details

Details for the file regex-2022.8.17-cp310-cp310-musllinux_1_1_ppc64le.whl.

File metadata

File hashes

Hashes for regex-2022.8.17-cp310-cp310-musllinux_1_1_ppc64le.whl
Algorithm Hash digest
SHA256 c78c72f7878071a78337510ec78ab856d60b4bdcd3a95fd68b939e7cb30434b3
MD5 0afe6307869458e53879266c727c0a46
BLAKE2b-256 f5cdfca08d0579ed41b61a9fb5b3617a80b1c03c8b2ac58bf789e7b5d35721a1

See more details on using hashes here.

File details

Details for the file regex-2022.8.17-cp310-cp310-musllinux_1_1_i686.whl.

File metadata

File hashes

Hashes for regex-2022.8.17-cp310-cp310-musllinux_1_1_i686.whl
Algorithm Hash digest
SHA256 5d541bc430a74c787684d1ebcd205a5212a88c3de73848143e77489b2c25b911
MD5 cee764b36273108c420c2f0039434476
BLAKE2b-256 8b819aa44feb1e72490b98a815a9de1c225438689973282132d5a7858de9dc25

See more details on using hashes here.

File details

Details for the file regex-2022.8.17-cp310-cp310-musllinux_1_1_aarch64.whl.

File metadata

File hashes

Hashes for regex-2022.8.17-cp310-cp310-musllinux_1_1_aarch64.whl
Algorithm Hash digest
SHA256 a1e283ad918df44bad3ccf042c2fe283c63d17617570eb91b8c370ef677b0b83
MD5 0ed31c3a2615de0e0cd342b564b4c55b
BLAKE2b-256 feee70d303b3d99eae703a523ee6297ff10dea6b435c5f81e4ca73a42eff5993

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for regex-2022.8.17-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl
Algorithm Hash digest
SHA256 d13bd83284b46c304eb10de93f8a3f2c80361f91f4e8a4e1273caf83e16c4409
MD5 9156bf6498b78de0b90f3f09f5531f4f
BLAKE2b-256 45575ebf2ee46f301197f26a12d7d2c474489434509296d09fd4424eb47e8f0c

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for regex-2022.8.17-cp310-cp310-manylinux_2_17_s390x.manylinux2014_s390x.whl
Algorithm Hash digest
SHA256 0a9d5a64e974bc5f160f30f76aaf993d49eeddb405676be6bf76a5a2c131e185
MD5 4fa1a5e2c4ca521627a5bbac697a488d
BLAKE2b-256 810fbf603c7c5b5c3d87a04c15ea6cf66300c927983dbed5fda9b3d64c57b6b5

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for regex-2022.8.17-cp310-cp310-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl
Algorithm Hash digest
SHA256 21b6f939916aa61beea56393ebc8a9999060632ac22b8193c2cb67d6fd7cb2c3
MD5 30ccb8772b08a9cd3f3b7b251652f7ce
BLAKE2b-256 37bc2c616e96dabd3e1b071a68cff6b2513afbea8860b29e6f8e393a076691a6

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for regex-2022.8.17-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl
Algorithm Hash digest
SHA256 085ca3dc9360c0210e0a70e5d34d66454a06077644e7679fef6358b1f053e62e
MD5 d828c4f907778e8bbb71f91cd9fde74c
BLAKE2b-256 54eebcc950594712a33b1cd18330168c28e474993e0888ecebbfdefdaa7b4bf1

See more details on using hashes here.

File details

Details for the file regex-2022.8.17-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-2022.8.17-cp310-cp310-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_12_x86_64.manylinux2010_x86_64.whl
Algorithm Hash digest
SHA256 be6f5b453f7ed2219a9555bb6840663950b9ab1dc034216f68eac64db66633c2
MD5 c104facf448da2d613fd5c75fa9b4699
BLAKE2b-256 891e197b67b22fef32578c0a67a70dc4d3562c99d12de76e5d8ed219cf9deefb

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for regex-2022.8.17-cp310-cp310-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl
Algorithm Hash digest
SHA256 7a52d547259495a53e61e37ffc6d5cecf8d298aeb1bc0d9b25289d65ddb31183
MD5 f1f48e432b581d068846d16d8d80a48c
BLAKE2b-256 cbaa1866bc61075304d8643fd928324102a3190a16e65681b7b86aee0ae8800e

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for regex-2022.8.17-cp310-cp310-macosx_11_0_arm64.whl
Algorithm Hash digest
SHA256 1df31eaf147ecff3665ba861acb8f78221cd5501df072c9151dfa341dd24599f
MD5 1e0020425d1276fa934980bd959a7fd9
BLAKE2b-256 3a3cd2fe262347c7dfb6a87d47751ab12fa9b34526190342d499153733bae1bc

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for regex-2022.8.17-cp310-cp310-macosx_10_9_x86_64.whl
Algorithm Hash digest
SHA256 840063aa8eeb1dda07d7d7dee15648838bffef1d415f5f79061854a182a429aa
MD5 7b30ca6191e9dca36f71ab1240ee3150
BLAKE2b-256 8ec6d8d0709bcf8d34c071254f6ea724504d9d6cdb56521f3de1c231384380c0

See more details on using hashes here.

File details

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

File metadata

  • Download URL: regex-2022.8.17-cp39-cp39-win_amd64.whl
  • Upload date:
  • Size: 263.1 kB
  • Tags: CPython 3.9, Windows x86-64
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/4.0.1 CPython/3.9.13

File hashes

Hashes for regex-2022.8.17-cp39-cp39-win_amd64.whl
Algorithm Hash digest
SHA256 ccb986e80674c929f198464bce55e995178dea26833421e2479ff04a6956afac
MD5 5bb3bfb82baf28e773dba95a3732dbc6
BLAKE2b-256 fec7b859feb3189e91fffbfbb3088db3cf5aa57f112f0340207ece595f2a77b5

See more details on using hashes here.

File details

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

File metadata

  • Download URL: regex-2022.8.17-cp39-cp39-win32.whl
  • Upload date:
  • Size: 251.4 kB
  • Tags: CPython 3.9, Windows x86
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/4.0.1 CPython/3.9.13

File hashes

Hashes for regex-2022.8.17-cp39-cp39-win32.whl
Algorithm Hash digest
SHA256 fac611bde2609a46fcbd92da7171286faa2f5c191f84d22f61cd7dc27213f51d
MD5 eccac091cbae631fdff1869dde405ac0
BLAKE2b-256 c107586d48e13062822a77279166233b36108dc6849c6438c278e2f4cce0bed2

See more details on using hashes here.

File details

Details for the file regex-2022.8.17-cp39-cp39-musllinux_1_1_x86_64.whl.

File metadata

File hashes

Hashes for regex-2022.8.17-cp39-cp39-musllinux_1_1_x86_64.whl
Algorithm Hash digest
SHA256 a25d251546acb5edb1635631c4ae0e330fa4ec7c6316c01d256728fbfb9bbff2
MD5 9863ec974d0265c3577f53f5a3874ea6
BLAKE2b-256 c751891912bf3afb464b8a6d4b843f449c9ad20cadc27dc83135e2d7a045d9bc

See more details on using hashes here.

File details

Details for the file regex-2022.8.17-cp39-cp39-musllinux_1_1_s390x.whl.

File metadata

File hashes

Hashes for regex-2022.8.17-cp39-cp39-musllinux_1_1_s390x.whl
Algorithm Hash digest
SHA256 d76e585368388d99ddd2f95989e6ac80a8fe23115e93931faad99fa34550612f
MD5 06a4ec72e9f2a4813192eaf60aa75940
BLAKE2b-256 3e8032d59a94e80ade2900cd73c98a677c6fe0890d50b306b4394dcd813c069a

See more details on using hashes here.

File details

Details for the file regex-2022.8.17-cp39-cp39-musllinux_1_1_ppc64le.whl.

File metadata

File hashes

Hashes for regex-2022.8.17-cp39-cp39-musllinux_1_1_ppc64le.whl
Algorithm Hash digest
SHA256 99a7c5786de9e92ff5ffee2e8bed745f5d25495206f3f14656c379031e518334
MD5 9f412d993dc002beccba3a9313141002
BLAKE2b-256 3f304a42755192aad55690fcbc04501672a1b1e6d10239236d1f7e5fee3da09d

See more details on using hashes here.

File details

Details for the file regex-2022.8.17-cp39-cp39-musllinux_1_1_i686.whl.

File metadata

File hashes

Hashes for regex-2022.8.17-cp39-cp39-musllinux_1_1_i686.whl
Algorithm Hash digest
SHA256 777ceea2860a48e9e362a4e2a9a691782ea97bd05c24627c92e876fdd2c22e61
MD5 d448e20d546c618d02d37a056348cc20
BLAKE2b-256 88c3db2f1d033a1679128d3d000ad2150b59dac37042259cbbf537b4a85b9ffe

See more details on using hashes here.

File details

Details for the file regex-2022.8.17-cp39-cp39-musllinux_1_1_aarch64.whl.

File metadata

File hashes

Hashes for regex-2022.8.17-cp39-cp39-musllinux_1_1_aarch64.whl
Algorithm Hash digest
SHA256 45cb798095b886e4df6ff4a1f7661eb70620ccdef127e3c3e00a1aaa22d30e53
MD5 b678c54cdd77bba0bb8d211f085bf83d
BLAKE2b-256 e233152a17d52f6445eb1caa96f196c30626b5485ed83c411642b4afb1f967db

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for regex-2022.8.17-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.whl
Algorithm Hash digest
SHA256 9668da78bcc219542467f51c2cd01894222be6aceec4b5efb806705900b794d8
MD5 2ab45d7ab165a4eb07ab793d161039bb
BLAKE2b-256 942d4a374eae11185e75ed8d21cc413b1770262900356d1405be4d50af9876d5

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for regex-2022.8.17-cp39-cp39-manylinux_2_17_s390x.manylinux2014_s390x.whl
Algorithm Hash digest
SHA256 e0b55651db770b4b5a6c7d015f24d1a6ede307296bbdf0c47fc5f6a6adc7abee
MD5 c92ecc9793c418e5e89f8c815bd35cb7
BLAKE2b-256 988145a4872c834ebe96b46d82ace3378678994396703438410984807a48b47b

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for regex-2022.8.17-cp39-cp39-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl
Algorithm Hash digest
SHA256 2240fce3af236e4586a045c1be8bbf16c4f8831e68b7df918b72fc31a80143be
MD5 05da6b3685a420cfd7c84cf3cca7a4ab
BLAKE2b-256 2f174dd6cb4452716c0fdfc39ee9b63a4426081317e0c8bb27646f98524d318c

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for regex-2022.8.17-cp39-cp39-manylinux_2_17_aarch64.manylinux2014_aarch64.whl
Algorithm Hash digest
SHA256 f7b88bc7306136b123fd1a9beed16ca02900ee31d1c36e73fa33d9e525a5562d
MD5 7c2c26c69b9a849e4fd576e37d7142c7
BLAKE2b-256 b0f03c32aac695b2be07133ba1f941839a9788192471fa80b7624f195fbcbcc5

See more details on using hashes here.

File details

Details for the file regex-2022.8.17-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-2022.8.17-cp39-cp39-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_12_x86_64.manylinux2010_x86_64.whl
Algorithm Hash digest
SHA256 c2b6404631b22617b5127c6de2355393ccda693ca733a098b6802e7dabb3457a
MD5 e7a726b48c2d64f5e4a061211a681dc9
BLAKE2b-256 457654d91a94345364600bda7c1ae7e63516bd552b7a0ef3536f93edf5acfca1

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for regex-2022.8.17-cp39-cp39-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl
Algorithm Hash digest
SHA256 5e7c8f9f8824143c219dd93cdc733c20d2c12f154034c89bcb4911db8e45bd92
MD5 3da7743d7389231fa3c8274a5576a91f
BLAKE2b-256 5d065e170dad5b9b1343836858712e0fd402073d73f1db0b9ab24d834aaecc15

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for regex-2022.8.17-cp39-cp39-macosx_11_0_arm64.whl
Algorithm Hash digest
SHA256 242f546fc5e49bb7395624ac3b4fc168bf454e11ace9804c58c4c3a90d84e38f
MD5 fd0efac8a071c4c1c7afaf27eac79bfe
BLAKE2b-256 9479648513ddf116dac1f36aa5eb78ad095485d96c2e97e2babe9d865caa493c

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for regex-2022.8.17-cp39-cp39-macosx_10_9_x86_64.whl
Algorithm Hash digest
SHA256 7658d2dfc1dabfb008ffe12ae47b98559e2aedd8237bee12f5aafb74d90479e3
MD5 ea399c3887fd5330cf77c0c53c3b612f
BLAKE2b-256 80eea916378ca0ca90d8fad4ee38471491f2846318a3296c9ce1c837e26e45d3

See more details on using hashes here.

File details

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

File metadata

  • Download URL: regex-2022.8.17-cp38-cp38-win_amd64.whl
  • Upload date:
  • Size: 263.0 kB
  • Tags: CPython 3.8, Windows x86-64
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/4.0.1 CPython/3.9.13

File hashes

Hashes for regex-2022.8.17-cp38-cp38-win_amd64.whl
Algorithm Hash digest
SHA256 2c198921afc811bc0f105c6e5150fbdebf9520c9b7d43cfc0ab156ca97f506d7
MD5 06fb6827f6ec7df4b484eb7174806934
BLAKE2b-256 f729c7d5c7247cc89c176956b29d466459b23ba431cff981b63bb08b49f12ead

See more details on using hashes here.

File details

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

File metadata

  • Download URL: regex-2022.8.17-cp38-cp38-win32.whl
  • Upload date:
  • Size: 251.4 kB
  • Tags: CPython 3.8, Windows x86
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/4.0.1 CPython/3.9.13

File hashes

Hashes for regex-2022.8.17-cp38-cp38-win32.whl
Algorithm Hash digest
SHA256 1418d3506a9582b23a27373f125ea2b0da523c581e7cf678a6f036254d134faa
MD5 787ce0b61ad2ddeba481db4efe1d2afc
BLAKE2b-256 f70b87e557b723cb1e4f18ef00f00ec4b7ce79171d39d36f664a9d2827f5f485

See more details on using hashes here.

File details

Details for the file regex-2022.8.17-cp38-cp38-musllinux_1_1_x86_64.whl.

File metadata

File hashes

Hashes for regex-2022.8.17-cp38-cp38-musllinux_1_1_x86_64.whl
Algorithm Hash digest
SHA256 2ada67e02fa3fcca9e3b90cf24c2c6bc77f0abc126209937956aea10eeba40c7
MD5 cfaa98ca9f6ab3c2c076736eecf9853f
BLAKE2b-256 334060de2f4517fa0e63322786f79df5dcc4813ae996b5419296ec0a4e96443a

See more details on using hashes here.

File details

Details for the file regex-2022.8.17-cp38-cp38-musllinux_1_1_s390x.whl.

File metadata

File hashes

Hashes for regex-2022.8.17-cp38-cp38-musllinux_1_1_s390x.whl
Algorithm Hash digest
SHA256 4c6554073e3e554fbb3dff88376ada3da32ca789ea1b9e381f684d49ddb61199
MD5 4556b0bd9ecd71c760a6b05a122f810f
BLAKE2b-256 33a193eb5a48ee7df8386fa750223d6824e78e0edd3c48654920e059c1c12849

See more details on using hashes here.

File details

Details for the file regex-2022.8.17-cp38-cp38-musllinux_1_1_ppc64le.whl.

File metadata

File hashes

Hashes for regex-2022.8.17-cp38-cp38-musllinux_1_1_ppc64le.whl
Algorithm Hash digest
SHA256 dc32029b9cc784a529f9201289d4f841cc24a2ae3126a112cd467bc41bbc2f10
MD5 fb1471f208ebd1057c5a4c1098bc0a94
BLAKE2b-256 f4f2d759ad59eb2c4aa8ec37a261509a298468dff93bfad8467b42c74e4b9234

See more details on using hashes here.

File details

Details for the file regex-2022.8.17-cp38-cp38-musllinux_1_1_i686.whl.

File metadata

File hashes

Hashes for regex-2022.8.17-cp38-cp38-musllinux_1_1_i686.whl
Algorithm Hash digest
SHA256 4e12a3c2d4781ee5d03f229c940934fa1e4ea4f4995e68ab97a2815b139e0804
MD5 45fa6e1b8154d91168ec9e2107326f32
BLAKE2b-256 c51ac1f3e5b0da76f46686cdabf5bcf678977b41997ea6863a2ef743fb3db1ce

See more details on using hashes here.

File details

Details for the file regex-2022.8.17-cp38-cp38-musllinux_1_1_aarch64.whl.

File metadata

File hashes

Hashes for regex-2022.8.17-cp38-cp38-musllinux_1_1_aarch64.whl
Algorithm Hash digest
SHA256 0843cc977b9cc00eb2299b624db6481d25e7f5b093f7a7c2bb727028d4a26eda
MD5 0d155702d5fe3de6e8ab480428059eb3
BLAKE2b-256 e123b719f6cc755e21d75ccb1dbc12a6fa8eaaae2980ef48d51cf36def229726

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for regex-2022.8.17-cp38-cp38-manylinux_2_17_x86_64.manylinux2014_x86_64.whl
Algorithm Hash digest
SHA256 4bdfd016ab12c4075ef93f025b3cf4c8962b9b7a5e52bb7039ab64cb7755930c
MD5 3638cbe105e0f09cdb9190bbcd50cfa2
BLAKE2b-256 02393d42f008b088f1a4e3ec56bce5e9640faa836dd3c0452394d8f2f2cb431a

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for regex-2022.8.17-cp38-cp38-manylinux_2_17_s390x.manylinux2014_s390x.whl
Algorithm Hash digest
SHA256 8e8ec94d1b1a0a297c2c69a0bf000baf9a79607ca0c084f577f811a9b447c319
MD5 aa8b7ae8938e9b8285aaa5a77368f57f
BLAKE2b-256 1bc8440d4e2489443270cee8122b56c8cb1ac27d7376900223d84ce380612cb4

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for regex-2022.8.17-cp38-cp38-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl
Algorithm Hash digest
SHA256 1b6d2c579ffdcbb3d93f63b6a7f697364594e1c1b6856958b3e61e3ca22c140a
MD5 643a4e4db1ad86bdb4a570837a480797
BLAKE2b-256 446c876edac1d90ff3cd5778c2f154d4d93165731d1baa0f56ed345d8025e8a4

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for regex-2022.8.17-cp38-cp38-manylinux_2_17_aarch64.manylinux2014_aarch64.whl
Algorithm Hash digest
SHA256 3d83fd6dd4263595d0e4f595d4abd54397cbed52c0147f7dd148a7b72910301e
MD5 d3f0c28478a3397ecb54449c0c45a035
BLAKE2b-256 bf82eeec92489b044124365fff8eecc104d1101fac2a7397a7c31bb226d4b6d3

See more details on using hashes here.

File details

Details for the file regex-2022.8.17-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-2022.8.17-cp38-cp38-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_12_x86_64.manylinux2010_x86_64.whl
Algorithm Hash digest
SHA256 25bffa248b99b53a61b1f20fc7d19f711e38e9f0bc90d44c26670f8dc282ad7d
MD5 710f42d54dd62bfad56036caceaefa9e
BLAKE2b-256 9b8cdd97182fdcd035da4abeeaf97d99b0071267cc142fed1910e24d341b36dc

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for regex-2022.8.17-cp38-cp38-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl
Algorithm Hash digest
SHA256 cb0c9a1476d279524538ba9a00ecec9eadcef31a6a60b2c8bd2f29f62044a559
MD5 565ceb26a8dee106439d3344a6e99ad5
BLAKE2b-256 6e0244df723c58b1e47b306da0ea8942da16c72dd3de9979bb2e5f46c3a47d77

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for regex-2022.8.17-cp38-cp38-macosx_11_0_arm64.whl
Algorithm Hash digest
SHA256 bbaf6785d3f1cd3e617b9d0fb3c5528023ef7bc7cc1356234801dc1941df8ce9
MD5 169c1c830075f3ea55fc7a7535165815
BLAKE2b-256 ea2d9c6f07715e4cce1eb3847ab6764733ab5e0dec39f1c153dbd700838a9ee2

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for regex-2022.8.17-cp38-cp38-macosx_10_9_x86_64.whl
Algorithm Hash digest
SHA256 b3c7c6c4aac19b964c1d12784aecae7f0315314640b0f41dd6f0d4e2bf439072
MD5 267add8d29989e686f7d79519cf67842
BLAKE2b-256 318dd13340e47df7cfee1dde470a046698b8000cdaa8189b4c866c7b19f9789b

See more details on using hashes here.

File details

Details for the file regex-2022.8.17-cp37-cp37m-win_amd64.whl.

File metadata

  • Download URL: regex-2022.8.17-cp37-cp37m-win_amd64.whl
  • Upload date:
  • Size: 263.3 kB
  • Tags: CPython 3.7m, Windows x86-64
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/4.0.1 CPython/3.9.13

File hashes

Hashes for regex-2022.8.17-cp37-cp37m-win_amd64.whl
Algorithm Hash digest
SHA256 4bd9443f7ff6e6288dd4496215c5d903f851e55cbc09d5963587af0c6d565a0a
MD5 f09940be010fbdea13dc1f19e0ed42f2
BLAKE2b-256 2bb186ac466b034a48d16a46528f432c539aee532d904fb566cfba9a5af4b56c

See more details on using hashes here.

File details

Details for the file regex-2022.8.17-cp37-cp37m-win32.whl.

File metadata

  • Download URL: regex-2022.8.17-cp37-cp37m-win32.whl
  • Upload date:
  • Size: 250.8 kB
  • Tags: CPython 3.7m, Windows x86
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/4.0.1 CPython/3.9.13

File hashes

Hashes for regex-2022.8.17-cp37-cp37m-win32.whl
Algorithm Hash digest
SHA256 74d4aabd612d32282f3cb3ebb4436046fb840d25c754157a755bc9f66e7cd307
MD5 906ac4bf69cb6e0cf3eea2bfa28cdbe5
BLAKE2b-256 a732a7b2a6ce70b934c35c88ec93cc24bdaeb95c5d90aa7db5b3a41a88130d5d

See more details on using hashes here.

File details

Details for the file regex-2022.8.17-cp37-cp37m-musllinux_1_1_x86_64.whl.

File metadata

File hashes

Hashes for regex-2022.8.17-cp37-cp37m-musllinux_1_1_x86_64.whl
Algorithm Hash digest
SHA256 3aafbbf5076f2a48bcf31ceb42b410323daaa0ddb42544640592957bc906ace6
MD5 a51370628cee5455cb92d4eaedcf17f0
BLAKE2b-256 082a8df1856a942178511cda3d587a7ac98545e07ae92526e20085040308b341

See more details on using hashes here.

File details

Details for the file regex-2022.8.17-cp37-cp37m-musllinux_1_1_s390x.whl.

File metadata

File hashes

Hashes for regex-2022.8.17-cp37-cp37m-musllinux_1_1_s390x.whl
Algorithm Hash digest
SHA256 14750172c0a616140a8f496dfef28ed24080e87d06d5838e008f959ad307a8c5
MD5 7c49e134de32a23d0b140ccbd1a3713d
BLAKE2b-256 12b8bac53993900fcbc64699fb5014ca241fcf95a01f5e4832a7412a9b0cf019

See more details on using hashes here.

File details

Details for the file regex-2022.8.17-cp37-cp37m-musllinux_1_1_ppc64le.whl.

File metadata

File hashes

Hashes for regex-2022.8.17-cp37-cp37m-musllinux_1_1_ppc64le.whl
Algorithm Hash digest
SHA256 fafed60103132e74cdfbd651abe94801eb87a9765ce275b3dca9af8f3e06622a
MD5 831b68e86d875c92226a751b7826efba
BLAKE2b-256 5cad9c75607cf75be7ab8a250926cc4f56dc06641d46e830a906cef71d680c2e

See more details on using hashes here.

File details

Details for the file regex-2022.8.17-cp37-cp37m-musllinux_1_1_i686.whl.

File metadata

File hashes

Hashes for regex-2022.8.17-cp37-cp37m-musllinux_1_1_i686.whl
Algorithm Hash digest
SHA256 3d3d769b3d485b28d6a591b46723dbacc696e6503f48a3ef52e6fc2c90edb482
MD5 a68dcb7430225d60555e9cc1ee1c78c9
BLAKE2b-256 390f13f5e7c651fea706b2e205098021723f21e07506db03ff0c4a19249c5928

See more details on using hashes here.

File details

Details for the file regex-2022.8.17-cp37-cp37m-musllinux_1_1_aarch64.whl.

File metadata

File hashes

Hashes for regex-2022.8.17-cp37-cp37m-musllinux_1_1_aarch64.whl
Algorithm Hash digest
SHA256 b3379a83dc63fe06538c751961f9ed730b5d7f08f96a57bbad8d52db5820df1f
MD5 06ade1be68866121e70955312e9c2748
BLAKE2b-256 741acebd507de87c7aea49c7fcf04a9f0637141ccc861354a9f1b867e19cee30

See more details on using hashes here.

File details

Details for the file regex-2022.8.17-cp37-cp37m-manylinux_2_17_x86_64.manylinux2014_x86_64.whl.

File metadata

File hashes

Hashes for regex-2022.8.17-cp37-cp37m-manylinux_2_17_x86_64.manylinux2014_x86_64.whl
Algorithm Hash digest
SHA256 6f0c8807bac16984901c0573725bad786f2f004f9bd5df8476c6431097b6c5b3
MD5 431d97a7a51b291de4da04bec3bc791f
BLAKE2b-256 98614dcf1dbccbc7d494857ece83edaecf1b0cb79d2bb4a19dcbe054b4dcebf8

See more details on using hashes here.

File details

Details for the file regex-2022.8.17-cp37-cp37m-manylinux_2_17_s390x.manylinux2014_s390x.whl.

File metadata

File hashes

Hashes for regex-2022.8.17-cp37-cp37m-manylinux_2_17_s390x.manylinux2014_s390x.whl
Algorithm Hash digest
SHA256 ae85112da2d826b65aa7c7369c56ca41d9a89644312172979cbee5cf788e0b09
MD5 91a8be1caa33cef71be477e1f0984063
BLAKE2b-256 130c0659654b1dbbc2dfbb10e75668678d42f8ac16d0a10d962559b59fde6cbd

See more details on using hashes here.

File details

Details for the file regex-2022.8.17-cp37-cp37m-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl.

File metadata

File hashes

Hashes for regex-2022.8.17-cp37-cp37m-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl
Algorithm Hash digest
SHA256 5910bb355f9517309f77101238dbacb7151ede3434a2f1fad26ecc62f13d8324
MD5 1c0e72c2dff35cd731f865c600bd852f
BLAKE2b-256 e8b279f6b2eaefb0d7e2dcd010ed8b69e95e5c06b7fdbc0571b66726edc6f638

See more details on using hashes here.

File details

Details for the file regex-2022.8.17-cp37-cp37m-manylinux_2_17_aarch64.manylinux2014_aarch64.whl.

File metadata

File hashes

Hashes for regex-2022.8.17-cp37-cp37m-manylinux_2_17_aarch64.manylinux2014_aarch64.whl
Algorithm Hash digest
SHA256 64ecfcc386420192fbe98fdde777d993f7f2dfec9552e4f4024d3447d3a3e637
MD5 8df2cdb7ec365bc58c89afdcd61f07ef
BLAKE2b-256 b378e731bd222734ebc83dffeed8decce210995a6d2e499ea9ca465d4652e080

See more details on using hashes here.

File details

Details for the file regex-2022.8.17-cp37-cp37m-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_12_x86_64.manylinux2010_x86_64.whl.

File metadata

File hashes

Hashes for regex-2022.8.17-cp37-cp37m-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_12_x86_64.manylinux2010_x86_64.whl
Algorithm Hash digest
SHA256 e37886929ee83a5fa5c73164abada00e7f3cc1cbf3f8f6e1e8cfecae9d6cfc47
MD5 f5a45ee5acd9ff59fefe96824eeb89b9
BLAKE2b-256 2b9a1607648bcead6979cf84cc90291b685d76af5e4327bd3d9577f85e8da6c9

See more details on using hashes here.

File details

Details for the file regex-2022.8.17-cp37-cp37m-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl.

File metadata

File hashes

Hashes for regex-2022.8.17-cp37-cp37m-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl
Algorithm Hash digest
SHA256 53c9eca0d6070a8a3de42182ad26daf90ba12132eb74a2f45702332762aff84e
MD5 56fb9248278b71290dbb6b8dd4d6be54
BLAKE2b-256 1201aa5614bd8d3111aa53413eb1c75f5b3271a5b3623ea4cf6a7349906f6ad2

See more details on using hashes here.

File details

Details for the file regex-2022.8.17-cp37-cp37m-macosx_10_9_x86_64.whl.

File metadata

File hashes

Hashes for regex-2022.8.17-cp37-cp37m-macosx_10_9_x86_64.whl
Algorithm Hash digest
SHA256 cfa62063c5eafb04e4435459ce15746b4ae6c14efeae8f16bd0e3d2895dad698
MD5 462299bb9f3e2e68bc96135b9f471dfe
BLAKE2b-256 f794990de0ac77c7bc72d0e803bf4a3e5cb0ceb2b42676570c085e8560ff9333

See more details on using hashes here.

File details

Details for the file regex-2022.8.17-cp36-cp36m-win_amd64.whl.

File metadata

  • Download URL: regex-2022.8.17-cp36-cp36m-win_amd64.whl
  • Upload date:
  • Size: 275.1 kB
  • Tags: CPython 3.6m, Windows x86-64
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/4.0.1 CPython/3.9.13

File hashes

Hashes for regex-2022.8.17-cp36-cp36m-win_amd64.whl
Algorithm Hash digest
SHA256 6af38997f178889d417851bae8fb5c00448f7405cfcab38734d771f1dd5d5973
MD5 c68cc5505946203212e230372f014ae9
BLAKE2b-256 611bbf1dda4d03c0deb90fd437ba39d71ee18ba91143925166d860d481a2dd43

See more details on using hashes here.

File details

Details for the file regex-2022.8.17-cp36-cp36m-win32.whl.

File metadata

  • Download URL: regex-2022.8.17-cp36-cp36m-win32.whl
  • Upload date:
  • Size: 257.9 kB
  • Tags: CPython 3.6m, Windows x86
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/4.0.1 CPython/3.9.13

File hashes

Hashes for regex-2022.8.17-cp36-cp36m-win32.whl
Algorithm Hash digest
SHA256 6059ae91667932d256d9dc03abd3512ebcade322b3a42d1b8354bd1db7f66dcc
MD5 b92b1a9f7c758c67c4a755e54ee1c3de
BLAKE2b-256 ac0e40b9ca524e7220771421a4bd9b7169a6d5b8b7f815d6917a8d2d8c407667

See more details on using hashes here.

File details

Details for the file regex-2022.8.17-cp36-cp36m-musllinux_1_1_x86_64.whl.

File metadata

File hashes

Hashes for regex-2022.8.17-cp36-cp36m-musllinux_1_1_x86_64.whl
Algorithm Hash digest
SHA256 abe1adb32e2535aaa171e8b2b2d3f083f863c9974a3e6e7dae6bf4827fc8b983
MD5 9a050ef1d735420599b33381cfc8f3e8
BLAKE2b-256 4b0810579d7c175b25ace469f96f5ec96639a9fc9efc49de8bd5703d36768319

See more details on using hashes here.

File details

Details for the file regex-2022.8.17-cp36-cp36m-musllinux_1_1_s390x.whl.

File metadata

File hashes

Hashes for regex-2022.8.17-cp36-cp36m-musllinux_1_1_s390x.whl
Algorithm Hash digest
SHA256 0de0ce11c0835e1117eacbfe8fa6fa98dc0e8e746b486735cb0fdebe46a02222
MD5 aad329407fa20a3af3a3bf3132b5c322
BLAKE2b-256 9d06cce2c13d00d22c85c42bcdb0b6c115a0adafdcd332386f21cac216688c25

See more details on using hashes here.

File details

Details for the file regex-2022.8.17-cp36-cp36m-musllinux_1_1_ppc64le.whl.

File metadata

File hashes

Hashes for regex-2022.8.17-cp36-cp36m-musllinux_1_1_ppc64le.whl
Algorithm Hash digest
SHA256 95fb62a3980cf43e76c2fe95edab06ec70dc495b8aa660975eb9f0b2ffdae1e1
MD5 0253ac2f3ea316627768dd31ae40ed3d
BLAKE2b-256 b42aa054e0f91a9f2d259ba44c9b47f55cd29809c2037534631857025648e85b

See more details on using hashes here.

File details

Details for the file regex-2022.8.17-cp36-cp36m-musllinux_1_1_i686.whl.

File metadata

File hashes

Hashes for regex-2022.8.17-cp36-cp36m-musllinux_1_1_i686.whl
Algorithm Hash digest
SHA256 6f62c8a59f6b8e608880c61b138ae22668184bc266b025d33200dcf2cebe0872
MD5 0903221914193e5f36392bbc5e274d06
BLAKE2b-256 13f4ff5a2d547814f3868e4f615b5339742cd0cd3174dec1a2e6b8c2c58fd806

See more details on using hashes here.

File details

Details for the file regex-2022.8.17-cp36-cp36m-musllinux_1_1_aarch64.whl.

File metadata

File hashes

Hashes for regex-2022.8.17-cp36-cp36m-musllinux_1_1_aarch64.whl
Algorithm Hash digest
SHA256 b7ddecc80e87acf12c2cf12bf3721def47188c403f04e706f104b5e71fed2f31
MD5 4beecefc199cc23cc336e745632058aa
BLAKE2b-256 df812a2cacdafd4a0fec3de0735d53b61d0ffb1e256d1b0a5eab087224007c02

See more details on using hashes here.

File details

Details for the file regex-2022.8.17-cp36-cp36m-manylinux_2_17_x86_64.manylinux2014_x86_64.whl.

File metadata

File hashes

Hashes for regex-2022.8.17-cp36-cp36m-manylinux_2_17_x86_64.manylinux2014_x86_64.whl
Algorithm Hash digest
SHA256 370b1d7aed26e29915c3fb3e72e327f194824a76cedb60c0b9f6c6af53e89d72
MD5 b35150a6180adcf370aebed0c59d468d
BLAKE2b-256 0fc39b8d86271c109b4ea686c3bf686a5190f6759183fa1d83338cd7103b325e

See more details on using hashes here.

File details

Details for the file regex-2022.8.17-cp36-cp36m-manylinux_2_17_s390x.manylinux2014_s390x.whl.

File metadata

File hashes

Hashes for regex-2022.8.17-cp36-cp36m-manylinux_2_17_s390x.manylinux2014_s390x.whl
Algorithm Hash digest
SHA256 c76dd2c0615a28de21c97f9f6862e84faef58ff4d700196b4e395ef6a52291e4
MD5 f95cc348fa56225cd5025f7bcc61e8e6
BLAKE2b-256 62a1a5c9d5e9b332bdda68bd79ffe46234864fdd8a21ef00eadd2604d50742f0

See more details on using hashes here.

File details

Details for the file regex-2022.8.17-cp36-cp36m-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl.

File metadata

File hashes

Hashes for regex-2022.8.17-cp36-cp36m-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl
Algorithm Hash digest
SHA256 61f6966371fa1cbf26c6209771a02bef80336cdaca0c0af4dfa33d51019c0b93
MD5 83cc9ce8c6aff7968b8f8a2639c43af1
BLAKE2b-256 cafded0b51a9962f3fbc5613c210a61658eb1df1774fa9727c315d4dbd7d44e6

See more details on using hashes here.

File details

Details for the file regex-2022.8.17-cp36-cp36m-manylinux_2_17_aarch64.manylinux2014_aarch64.whl.

File metadata

File hashes

Hashes for regex-2022.8.17-cp36-cp36m-manylinux_2_17_aarch64.manylinux2014_aarch64.whl
Algorithm Hash digest
SHA256 62d56a9d3c1e5a83076db4da060dad7ea35ac2f3cbd3c53ba5a51fe0caedb500
MD5 b1d9f0b48cc1590668ff1e0742576471
BLAKE2b-256 ece8b6fd004cb5ea5ba76fe29634d13ac309e5a192758e00c57f4c10210b1404

See more details on using hashes here.

File details

Details for the file regex-2022.8.17-cp36-cp36m-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_12_x86_64.manylinux2010_x86_64.whl.

File metadata

File hashes

Hashes for regex-2022.8.17-cp36-cp36m-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_12_x86_64.manylinux2010_x86_64.whl
Algorithm Hash digest
SHA256 79f34d5833cd0d53ecf48bc030e4da3216bd4846224d17eeb64509be5cb098fd
MD5 ab5c6f13dbb500de15c97cae106f5d21
BLAKE2b-256 2eaee32b0268f8be91b4d11d96dda8f32c7d1448aa9d919bf5dd83f6e2d4f81a

See more details on using hashes here.

File details

Details for the file regex-2022.8.17-cp36-cp36m-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl.

File metadata

File hashes

Hashes for regex-2022.8.17-cp36-cp36m-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl
Algorithm Hash digest
SHA256 634f090a388351eadf1dcc1d168a190718fb68efb4b8fdc1b119cf837ca01905
MD5 ddba8adb39e4192d46317b236fb94973
BLAKE2b-256 87d24fa58aa4ca9404fcf9b6f7338ecce1b78e8221acd9ade91c5f58f38ec412

See more details on using hashes here.

File details

Details for the file regex-2022.8.17-cp36-cp36m-macosx_10_9_x86_64.whl.

File metadata

File hashes

Hashes for regex-2022.8.17-cp36-cp36m-macosx_10_9_x86_64.whl
Algorithm Hash digest
SHA256 4dad9d68574e93e1e23be53b4ecfb0f083bd5cc08cc7f1984a4ee3ebf12aa446
MD5 e8e5c65e8ca175830f513e61f8f5b22a
BLAKE2b-256 c172b3781ac82dab1f9f499eb3c17ea0b34c61e0ab759bef47cc2c58017a9739

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