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 15.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-2023.3.23.tar.gz (392.0 kB view details)

Uploaded Source

Built Distributions

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

regex-2023.3.23-cp311-cp311-win_amd64.whl (267.9 kB view details)

Uploaded CPython 3.11Windows x86-64

regex-2023.3.23-cp311-cp311-win32.whl (256.0 kB view details)

Uploaded CPython 3.11Windows x86

regex-2023.3.23-cp311-cp311-musllinux_1_1_x86_64.whl (750.2 kB view details)

Uploaded CPython 3.11musllinux: musl 1.1+ x86-64

regex-2023.3.23-cp311-cp311-musllinux_1_1_s390x.whl (774.5 kB view details)

Uploaded CPython 3.11musllinux: musl 1.1+ s390x

regex-2023.3.23-cp311-cp311-musllinux_1_1_ppc64le.whl (768.6 kB view details)

Uploaded CPython 3.11musllinux: musl 1.1+ ppc64le

regex-2023.3.23-cp311-cp311-musllinux_1_1_i686.whl (736.5 kB view details)

Uploaded CPython 3.11musllinux: musl 1.1+ i686

regex-2023.3.23-cp311-cp311-musllinux_1_1_aarch64.whl (746.3 kB view details)

Uploaded CPython 3.11musllinux: musl 1.1+ ARM64

regex-2023.3.23-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl (781.0 kB view details)

Uploaded CPython 3.11manylinux: glibc 2.17+ x86-64

regex-2023.3.23-cp311-cp311-manylinux_2_17_s390x.manylinux2014_s390x.whl (806.3 kB view details)

Uploaded CPython 3.11manylinux: glibc 2.17+ s390x

regex-2023.3.23-cp311-cp311-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl (822.2 kB view details)

Uploaded CPython 3.11manylinux: glibc 2.17+ ppc64le

regex-2023.3.23-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl (780.3 kB view details)

Uploaded CPython 3.11manylinux: glibc 2.17+ ARM64

regex-2023.3.23-cp311-cp311-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl (771.3 kB view details)

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

regex-2023.3.23-cp311-cp311-macosx_11_0_arm64.whl (288.8 kB view details)

Uploaded CPython 3.11macOS 11.0+ ARM64

regex-2023.3.23-cp311-cp311-macosx_10_9_x86_64.whl (294.5 kB view details)

Uploaded CPython 3.11macOS 10.9+ x86-64

regex-2023.3.23-cp310-cp310-win_amd64.whl (267.9 kB view details)

Uploaded CPython 3.10Windows x86-64

regex-2023.3.23-cp310-cp310-win32.whl (256.0 kB view details)

Uploaded CPython 3.10Windows x86

regex-2023.3.23-cp310-cp310-musllinux_1_1_x86_64.whl (741.2 kB view details)

Uploaded CPython 3.10musllinux: musl 1.1+ x86-64

regex-2023.3.23-cp310-cp310-musllinux_1_1_s390x.whl (763.4 kB view details)

Uploaded CPython 3.10musllinux: musl 1.1+ s390x

regex-2023.3.23-cp310-cp310-musllinux_1_1_ppc64le.whl (759.9 kB view details)

Uploaded CPython 3.10musllinux: musl 1.1+ ppc64le

regex-2023.3.23-cp310-cp310-musllinux_1_1_i686.whl (728.2 kB view details)

Uploaded CPython 3.10musllinux: musl 1.1+ i686

regex-2023.3.23-cp310-cp310-musllinux_1_1_aarch64.whl (738.0 kB view details)

Uploaded CPython 3.10musllinux: musl 1.1+ ARM64

regex-2023.3.23-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl (769.6 kB view details)

Uploaded CPython 3.10manylinux: glibc 2.17+ x86-64

regex-2023.3.23-cp310-cp310-manylinux_2_17_s390x.manylinux2014_s390x.whl (794.8 kB view details)

Uploaded CPython 3.10manylinux: glibc 2.17+ s390x

regex-2023.3.23-cp310-cp310-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl (809.6 kB view details)

Uploaded CPython 3.10manylinux: glibc 2.17+ ppc64le

regex-2023.3.23-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl (769.0 kB view details)

Uploaded CPython 3.10manylinux: glibc 2.17+ ARM64

regex-2023.3.23-cp310-cp310-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_12_x86_64.manylinux2010_x86_64.whl (685.8 kB view details)

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

regex-2023.3.23-cp310-cp310-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl (759.7 kB view details)

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

regex-2023.3.23-cp310-cp310-macosx_11_0_arm64.whl (288.9 kB view details)

Uploaded CPython 3.10macOS 11.0+ ARM64

regex-2023.3.23-cp310-cp310-macosx_10_9_x86_64.whl (294.4 kB view details)

Uploaded CPython 3.10macOS 10.9+ x86-64

regex-2023.3.23-cp39-cp39-win_amd64.whl (268.0 kB view details)

Uploaded CPython 3.9Windows x86-64

regex-2023.3.23-cp39-cp39-win32.whl (256.0 kB view details)

Uploaded CPython 3.9Windows x86

regex-2023.3.23-cp39-cp39-musllinux_1_1_x86_64.whl (741.0 kB view details)

Uploaded CPython 3.9musllinux: musl 1.1+ x86-64

regex-2023.3.23-cp39-cp39-musllinux_1_1_s390x.whl (762.9 kB view details)

Uploaded CPython 3.9musllinux: musl 1.1+ s390x

regex-2023.3.23-cp39-cp39-musllinux_1_1_ppc64le.whl (759.2 kB view details)

Uploaded CPython 3.9musllinux: musl 1.1+ ppc64le

regex-2023.3.23-cp39-cp39-musllinux_1_1_i686.whl (727.8 kB view details)

Uploaded CPython 3.9musllinux: musl 1.1+ i686

regex-2023.3.23-cp39-cp39-musllinux_1_1_aarch64.whl (737.6 kB view details)

Uploaded CPython 3.9musllinux: musl 1.1+ ARM64

regex-2023.3.23-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.whl (769.0 kB view details)

Uploaded CPython 3.9manylinux: glibc 2.17+ x86-64

regex-2023.3.23-cp39-cp39-manylinux_2_17_s390x.manylinux2014_s390x.whl (794.0 kB view details)

Uploaded CPython 3.9manylinux: glibc 2.17+ s390x

regex-2023.3.23-cp39-cp39-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl (809.0 kB view details)

Uploaded CPython 3.9manylinux: glibc 2.17+ ppc64le

regex-2023.3.23-cp39-cp39-manylinux_2_17_aarch64.manylinux2014_aarch64.whl (768.4 kB view details)

Uploaded CPython 3.9manylinux: glibc 2.17+ ARM64

regex-2023.3.23-cp39-cp39-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_12_x86_64.manylinux2010_x86_64.whl (685.3 kB view details)

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

regex-2023.3.23-cp39-cp39-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl (759.2 kB view details)

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

regex-2023.3.23-cp39-cp39-macosx_11_0_arm64.whl (288.9 kB view details)

Uploaded CPython 3.9macOS 11.0+ ARM64

regex-2023.3.23-cp39-cp39-macosx_10_9_x86_64.whl (294.4 kB view details)

Uploaded CPython 3.9macOS 10.9+ x86-64

regex-2023.3.23-cp38-cp38-win_amd64.whl (267.9 kB view details)

Uploaded CPython 3.8Windows x86-64

regex-2023.3.23-cp38-cp38-win32.whl (256.0 kB view details)

Uploaded CPython 3.8Windows x86

regex-2023.3.23-cp38-cp38-musllinux_1_1_x86_64.whl (747.4 kB view details)

Uploaded CPython 3.8musllinux: musl 1.1+ x86-64

regex-2023.3.23-cp38-cp38-musllinux_1_1_s390x.whl (769.4 kB view details)

Uploaded CPython 3.8musllinux: musl 1.1+ s390x

regex-2023.3.23-cp38-cp38-musllinux_1_1_ppc64le.whl (766.4 kB view details)

Uploaded CPython 3.8musllinux: musl 1.1+ ppc64le

regex-2023.3.23-cp38-cp38-musllinux_1_1_i686.whl (732.8 kB view details)

Uploaded CPython 3.8musllinux: musl 1.1+ i686

regex-2023.3.23-cp38-cp38-musllinux_1_1_aarch64.whl (744.0 kB view details)

Uploaded CPython 3.8musllinux: musl 1.1+ ARM64

regex-2023.3.23-cp38-cp38-manylinux_2_17_x86_64.manylinux2014_x86_64.whl (771.9 kB view details)

Uploaded CPython 3.8manylinux: glibc 2.17+ x86-64

regex-2023.3.23-cp38-cp38-manylinux_2_17_s390x.manylinux2014_s390x.whl (795.4 kB view details)

Uploaded CPython 3.8manylinux: glibc 2.17+ s390x

regex-2023.3.23-cp38-cp38-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl (811.7 kB view details)

Uploaded CPython 3.8manylinux: glibc 2.17+ ppc64le

regex-2023.3.23-cp38-cp38-manylinux_2_17_aarch64.manylinux2014_aarch64.whl (769.6 kB view details)

Uploaded CPython 3.8manylinux: glibc 2.17+ ARM64

regex-2023.3.23-cp38-cp38-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.8manylinux: glibc 2.12+ x86-64manylinux: glibc 2.5+ x86-64

regex-2023.3.23-cp38-cp38-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl (761.0 kB view details)

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

regex-2023.3.23-cp38-cp38-macosx_11_0_arm64.whl (288.7 kB view details)

Uploaded CPython 3.8macOS 11.0+ ARM64

regex-2023.3.23-cp38-cp38-macosx_10_9_x86_64.whl (294.5 kB view details)

Uploaded CPython 3.8macOS 10.9+ x86-64

File details

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

File metadata

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

File hashes

Hashes for regex-2023.3.23.tar.gz
Algorithm Hash digest
SHA256 dc80df325b43ffea5cdea2e3eaa97a44f3dd298262b1c7fe9dbb2a9522b956a7
MD5 4483fd12b0c75513f696d32091c9937f
BLAKE2b-256 d829bd8de07107bc952e0e2783243024e1c125e787fd685725a622e4ac7aeb3c

See more details on using hashes here.

File details

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

File metadata

  • Download URL: regex-2023.3.23-cp311-cp311-win_amd64.whl
  • Upload date:
  • Size: 267.9 kB
  • Tags: CPython 3.11, Windows x86-64
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/4.0.1 CPython/3.11.2

File hashes

Hashes for regex-2023.3.23-cp311-cp311-win_amd64.whl
Algorithm Hash digest
SHA256 5ccfafd98473e007cebf7da10c1411035b7844f0f204015efd050601906dbb53
MD5 e740d2c29bba7df05abf564ccdf36c88
BLAKE2b-256 7218dc772b16749461cd3ec24573934f040f9814d84c6559a8ca4da9ac6b8ae1

See more details on using hashes here.

File details

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

File metadata

  • Download URL: regex-2023.3.23-cp311-cp311-win32.whl
  • Upload date:
  • Size: 256.0 kB
  • Tags: CPython 3.11, Windows x86
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/4.0.1 CPython/3.11.2

File hashes

Hashes for regex-2023.3.23-cp311-cp311-win32.whl
Algorithm Hash digest
SHA256 25f0532fd0c53e96bad84664171969de9673b4131f2297f1db850d3918d58858
MD5 e892384ddadcd2dcfbff86a1a02812e3
BLAKE2b-256 84eb24dd2a4b708a3032673f8c459d14adb441456aa65630cb2d68085176b7c9

See more details on using hashes here.

File details

Details for the file regex-2023.3.23-cp311-cp311-musllinux_1_1_x86_64.whl.

File metadata

File hashes

Hashes for regex-2023.3.23-cp311-cp311-musllinux_1_1_x86_64.whl
Algorithm Hash digest
SHA256 c869260aa62cee21c5eb171a466c0572b5e809213612ef8d495268cd2e34f20d
MD5 3f0fc9f5964ff213dd11f6c846d67473
BLAKE2b-256 b5774e41254b2d6286d8a3e231480f11e79ea3cee7632f283063f24d9483e1a3

See more details on using hashes here.

File details

Details for the file regex-2023.3.23-cp311-cp311-musllinux_1_1_s390x.whl.

File metadata

File hashes

Hashes for regex-2023.3.23-cp311-cp311-musllinux_1_1_s390x.whl
Algorithm Hash digest
SHA256 75f288c60232a5339e0ff2fa05779a5e9c74e9fc085c81e931d4a264501e745b
MD5 afcf941f5c17f165d3435214ed8a4d7f
BLAKE2b-256 80a5964f6cf453c806fd46c97fa2ba432eff91767d1e5fd9d0d49ff9c97edc05

See more details on using hashes here.

File details

Details for the file regex-2023.3.23-cp311-cp311-musllinux_1_1_ppc64le.whl.

File metadata

File hashes

Hashes for regex-2023.3.23-cp311-cp311-musllinux_1_1_ppc64le.whl
Algorithm Hash digest
SHA256 e2396e0678167f2d0c197da942b0b3fb48fee2f0b5915a0feb84d11b6686afe6
MD5 ba771495aeeb19cd7f4c79a0695d521d
BLAKE2b-256 6c584e5e33e944f54dfe48e1fe7a1be6bde30e6553d4e0ba059ba4b111359515

See more details on using hashes here.

File details

Details for the file regex-2023.3.23-cp311-cp311-musllinux_1_1_i686.whl.

File metadata

File hashes

Hashes for regex-2023.3.23-cp311-cp311-musllinux_1_1_i686.whl
Algorithm Hash digest
SHA256 4479f9e2abc03362df4045b1332d4a2b7885b245a30d4f4b051c4083b97d95d8
MD5 2af3e9a7cd2dc503c565847eb13a3d59
BLAKE2b-256 29363d50a5f45efec70e4480de50a591e272d60c8cc1f4fce95298fc3fc66257

See more details on using hashes here.

File details

Details for the file regex-2023.3.23-cp311-cp311-musllinux_1_1_aarch64.whl.

File metadata

File hashes

Hashes for regex-2023.3.23-cp311-cp311-musllinux_1_1_aarch64.whl
Algorithm Hash digest
SHA256 c37df2a060cb476d94c047b18572ee2b37c31f831df126c0da3cd9227b39253d
MD5 aafaebf529b0410692d66807df4a0e67
BLAKE2b-256 26301b061ad1f85d6147ee2d181e8e36503996bf386ef9fb1d5ff8afa88d7c70

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for regex-2023.3.23-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl
Algorithm Hash digest
SHA256 7868b8f218bf69a2a15402fde08b08712213a1f4b85a156d90473a6fb6b12b09
MD5 58936793225f71b40c832c559d036c86
BLAKE2b-256 84729e6273be7027630c65650b43f964845888cc10152fd92a087007197685f1

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for regex-2023.3.23-cp311-cp311-manylinux_2_17_s390x.manylinux2014_s390x.whl
Algorithm Hash digest
SHA256 e76b6fc0d8e9efa39100369a9b3379ce35e20f6c75365653cf58d282ad290f6f
MD5 083a8c50af3836100df3189b4578afef
BLAKE2b-256 7398b96802c10f51d81770496812489854014578616ae62e874e2fd2a4aa4556

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for regex-2023.3.23-cp311-cp311-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl
Algorithm Hash digest
SHA256 6b190a339090e6af25f4a5fd9e77591f6d911cc7b96ecbb2114890b061be0ac1
MD5 03a43c04dd51af9b509fa1579f6d66a0
BLAKE2b-256 d600cc5e8fde1042bbea9aee31e420b269655ae570cb85f3e52a6586cfaa1492

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for regex-2023.3.23-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl
Algorithm Hash digest
SHA256 22720024b90a6ba673a725dcc62e10fb1111b889305d7c6b887ac7466b74bedb
MD5 a4b78443ae7e784dae20e58b4d1eb25b
BLAKE2b-256 1bcc628702b6b71d4e3c84dedd7c37210e30e58e235b826dbc0320f51cdbe1d5

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for regex-2023.3.23-cp311-cp311-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl
Algorithm Hash digest
SHA256 2472428efc4127374f494e570e36b30bb5e6b37d9a754f7667f7073e43b0abdd
MD5 10a1bcbf4847fa348f094f799654b813
BLAKE2b-256 a3ade6ff08c482396fc063858c7919618235300455bd86add3ab26def9c7d5e7

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for regex-2023.3.23-cp311-cp311-macosx_11_0_arm64.whl
Algorithm Hash digest
SHA256 dd7200b4c27b68cf9c9646da01647141c6db09f48cc5b51bc588deaf8e98a797
MD5 90963b272a93441525d5f0b5a0633d84
BLAKE2b-256 2bc212f0de728011be620421cec5884f41b651176821487b67631cc093585215

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for regex-2023.3.23-cp311-cp311-macosx_10_9_x86_64.whl
Algorithm Hash digest
SHA256 8a9c63cde0eaa345795c0fdeb19dc62d22e378c50b0bc67bf4667cd5b482d98b
MD5 f9a9d5a2015798ac64dee29d118fef18
BLAKE2b-256 a769275f20553b194755c4a5e36f337862eccf6942ec55f794341f62e93dba65

See more details on using hashes here.

File details

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

File metadata

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

File hashes

Hashes for regex-2023.3.23-cp310-cp310-win_amd64.whl
Algorithm Hash digest
SHA256 11d1f2b7a0696dc0310de0efb51b1f4d813ad4401fe368e83c0c62f344429f98
MD5 01f744229f3812670a65d125907fe31b
BLAKE2b-256 7967f9a546833ed75af00e8e5163ec0fe2771bf224410b914d7f95fbb7808d25

See more details on using hashes here.

File details

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

File metadata

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

File hashes

Hashes for regex-2023.3.23-cp310-cp310-win32.whl
Algorithm Hash digest
SHA256 9d764514d19b4edcc75fd8cb1423448ef393e8b6cbd94f38cab983ab1b75855d
MD5 0e5b42bdd10abccfb89f39bc692fa533
BLAKE2b-256 59ed8a4bc1983cc95fdb19b8627ffc44361a281dcc03da0bfdde4e6a07113a5b

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for regex-2023.3.23-cp310-cp310-musllinux_1_1_x86_64.whl
Algorithm Hash digest
SHA256 d895b4c863059a4934d3e874b90998df774644a41b349ebb330f85f11b4ef2c0
MD5 8db2b30cbcc709edfd4b4e4f44dc58e4
BLAKE2b-256 47ac7631ae51893aca9478cc26422ce66563682880b849c27af1cf0e2695e20b

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for regex-2023.3.23-cp310-cp310-musllinux_1_1_s390x.whl
Algorithm Hash digest
SHA256 ea3c0cb56eadbf4ab2277e7a095676370b3e46dbfc74d5c383bd87b0d6317910
MD5 8e84db92998f7b9ec40edb1c5aaf1a2d
BLAKE2b-256 fb5598d7ff983be33d572a1bbe073b6b1b5db249f467dcff2bb8d516b66c9848

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for regex-2023.3.23-cp310-cp310-musllinux_1_1_ppc64le.whl
Algorithm Hash digest
SHA256 d5bbe0e1511b844794a3be43d6c145001626ba9a6c1db8f84bdc724e91131d9d
MD5 515e5b2d0bd9f08715feb9033e99f2f0
BLAKE2b-256 c60d1ccc866a040c968ab331370e20b5ac48165459f76577c89f06e0f89c4dc4

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for regex-2023.3.23-cp310-cp310-musllinux_1_1_i686.whl
Algorithm Hash digest
SHA256 11d00c31aeab9a6e0503bc77e73ed9f4527b3984279d997eb145d7c7be6268fd
MD5 dd3a28c241827dba25c6d56e819e5c13
BLAKE2b-256 e10b8f4c19f0ced880501f96906e65f484ef1b42fe6bd93f79c9b5c1914f2618

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for regex-2023.3.23-cp310-cp310-musllinux_1_1_aarch64.whl
Algorithm Hash digest
SHA256 20abe0bdf03630fe92ccafc45a599bca8b3501f48d1de4f7d121153350a2f77d
MD5 f9984d6e2660a0ced5f90e18f89fa805
BLAKE2b-256 bb4f65c14619af6e6640d8eac947a8322582207beed27fb29fbb927653a51b38

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for regex-2023.3.23-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl
Algorithm Hash digest
SHA256 b7006105b10b59971d3b248ad75acc3651c7e4cf54d81694df5a5130a3c3f7ea
MD5 edd04f3a32f60b65f2fbf483651eca17
BLAKE2b-256 2990804db81268636547e25004404587e75a269fd6f7a38aa2d9e1209ed61544

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for regex-2023.3.23-cp310-cp310-manylinux_2_17_s390x.manylinux2014_s390x.whl
Algorithm Hash digest
SHA256 df45fac182ebc3c494460c644e853515cc24f5ad9da05f8ffb91da891bfee879
MD5 110d1cfcce4b96be7d7b277fff3fcf93
BLAKE2b-256 d0c33d59eddb6fe745f5152a5da4f666125e9a2aae1609797cb5cd2d0a4141eb

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for regex-2023.3.23-cp310-cp310-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl
Algorithm Hash digest
SHA256 0b8eb1e3bca6b48dc721818a60ae83b8264d4089a4a41d62be6d05316ec38e15
MD5 83765c56b28647c7e860d76365e7fc52
BLAKE2b-256 5d85524279048b9405be3d3318a5926b142b4d75f40083fed40fb21c957df480

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for regex-2023.3.23-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl
Algorithm Hash digest
SHA256 37ae17d3be44c0b3f782c28ae9edd8b47c1f1776d4cabe87edc0b98e1f12b021
MD5 3a1e506749fc52378d28705ab3abdd48
BLAKE2b-256 e5517a33a1a655fbd127d7ae2ab542d26530ec51e244169e371c91b256b39927

See more details on using hashes here.

File details

Details for the file regex-2023.3.23-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-2023.3.23-cp310-cp310-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_12_x86_64.manylinux2010_x86_64.whl
Algorithm Hash digest
SHA256 787954f541ab95d8195d97b0b8cf1dc304424adb1e07365967e656b92b38a699
MD5 39a3f69a37994875f696bc665f6fbd03
BLAKE2b-256 5ae1c191c9752d1d66daf9fb6443db13c1d3c5405a4b2b0136cbb86126b8758c

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for regex-2023.3.23-cp310-cp310-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl
Algorithm Hash digest
SHA256 93f3f1aa608380fe294aa4cb82e2afda07a7598e828d0341e124b8fd9327c715
MD5 9de9648316acb16161c81bfec1747dc3
BLAKE2b-256 4fbf3177bc0051029df278ed9cfc6de94753b2968b0d82bc9246a3e37a652dfa

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for regex-2023.3.23-cp310-cp310-macosx_11_0_arm64.whl
Algorithm Hash digest
SHA256 87d9951f5a538dd1d016bdc0dcae59241d15fa94860964833a54d18197fcd134
MD5 87307effb86fdf7a8bbd2f2acf8b266f
BLAKE2b-256 c62576a877c64d2677d6ea0b4011db4c3966eba1c473d342e5a2e0d8dcb70752

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for regex-2023.3.23-cp310-cp310-macosx_10_9_x86_64.whl
Algorithm Hash digest
SHA256 845a5e2d84389c4ddada1a9b95c055320070f18bb76512608374aca00d22eca8
MD5 a643bf80d80ccf1a6586eb6b234c283a
BLAKE2b-256 41593a725abd03da0a10555b9afcc954a80e5cd6d040f2bbc0e81a944715b63d

See more details on using hashes here.

File details

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

File metadata

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

File hashes

Hashes for regex-2023.3.23-cp39-cp39-win_amd64.whl
Algorithm Hash digest
SHA256 54c3fa855a3f7438149de3211738dd9b5f0c733f48b54ae05aa7fce83d48d858
MD5 c6354606d7d9f71ad3c8c45b844ee7f5
BLAKE2b-256 feb3afcb0c6fde8c5ee24c7cb5d29d0caafb9b57dd4b1400ca66cfc12d67e2b4

See more details on using hashes here.

File details

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

File metadata

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

File hashes

Hashes for regex-2023.3.23-cp39-cp39-win32.whl
Algorithm Hash digest
SHA256 7304863f3a652dab5e68e6fb1725d05ebab36ec0390676d1736e0571ebb713ef
MD5 508d6e34f29043759196a58b13bddd33
BLAKE2b-256 fe6863349d423d856993cbe1939f9189c826e757a4bb08fda931e6e7bfeb70cd

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for regex-2023.3.23-cp39-cp39-musllinux_1_1_x86_64.whl
Algorithm Hash digest
SHA256 3cd9f5dd7b821f141d3a6ca0d5d9359b9221e4f051ca3139320adea9f1679691
MD5 e0f5bd5a29b72708c739ad1defad9a24
BLAKE2b-256 7c3ead079974cbfc00ed6d355e4c26cb733ed19abd5418b3784f989d6c86303a

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for regex-2023.3.23-cp39-cp39-musllinux_1_1_s390x.whl
Algorithm Hash digest
SHA256 cde09c4fdd070772aa2596d97e942eb775a478b32459e042e1be71b739d08b77
MD5 997877edcef3956c738a366f4701df8f
BLAKE2b-256 03864a27b8135ec8e1e16ee1fcabe5123d879064eabf20aacf22daf794988474

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for regex-2023.3.23-cp39-cp39-musllinux_1_1_ppc64le.whl
Algorithm Hash digest
SHA256 a81c9ec59ca2303acd1ccd7b9ac409f1e478e40e96f8f79b943be476c5fdb8bb
MD5 92c02609f161ea2ffad47785d320f02a
BLAKE2b-256 4f5eaa17cfd9e4cf1451622f02a0dde488d23ed01110327b303f56cc4140d4e8

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for regex-2023.3.23-cp39-cp39-musllinux_1_1_i686.whl
Algorithm Hash digest
SHA256 ef3f528fe1cc3d139508fe1b22523745aa77b9d6cb5b0bf277f48788ee0b993f
MD5 dafae6c6392f435b1c60af4f0d328b9f
BLAKE2b-256 1f285d339d983a3398047b568435b88a32e5c30887bd3e331f61d78e52d9969a

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for regex-2023.3.23-cp39-cp39-musllinux_1_1_aarch64.whl
Algorithm Hash digest
SHA256 55ae114da21b7a790b90255ea52d2aa3a0d121a646deb2d3c6a3194e722fc762
MD5 45ba23a04d45eefa664d59ae713862d4
BLAKE2b-256 a5b69324c6da8957c9faaaccbaa734710bb5d57fa1e7b6e2c6a4167ebf4843ee

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for regex-2023.3.23-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.whl
Algorithm Hash digest
SHA256 4c49552dc938e3588f63f8a78c86f3c9c75301e813bca0bef13bdb4b87ccf364
MD5 2d96a95a6cbd3aba191ac46a47369783
BLAKE2b-256 22bdd891dfcc9ebbdc60535ac2b0de076f928202553268030c73e246a0bd84ea

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for regex-2023.3.23-cp39-cp39-manylinux_2_17_s390x.manylinux2014_s390x.whl
Algorithm Hash digest
SHA256 5fc33b27b1d800fc5b78d7f7d0f287e35079ecabe68e83d46930cf45690e1c8c
MD5 088ffb3c63f58016b934059024183e1a
BLAKE2b-256 79f9073a75ba8732b5f2352b7a0a9bf2fcbe0a546cf9be568879c4b27ca13986

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for regex-2023.3.23-cp39-cp39-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl
Algorithm Hash digest
SHA256 fdf7ad455f1916b8ea5cdbc482d379f6daf93f3867b4232d14699867a5a13af7
MD5 7f9d104fe947562e7c00b57ac337f191
BLAKE2b-256 aa12153b4ff30a3aa3adca197040fba7e5167ed04a75cc0c0df297a4a2399b82

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for regex-2023.3.23-cp39-cp39-manylinux_2_17_aarch64.manylinux2014_aarch64.whl
Algorithm Hash digest
SHA256 1b1fc2632c01f42e06173d8dd9bb2e74ab9b0afa1d698058c867288d2c7a31f3
MD5 e1539017d686d39206a3c55081137dc2
BLAKE2b-256 2d8b2b012e1f4c0f5e1fc2e96a9bd6dab0f2f4bc4dfb61b969916cfd436d7843

See more details on using hashes here.

File details

Details for the file regex-2023.3.23-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-2023.3.23-cp39-cp39-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_12_x86_64.manylinux2010_x86_64.whl
Algorithm Hash digest
SHA256 db034255e72d2995cf581b14bb3fc9c00bdbe6822b49fcd4eef79e1d5f232618
MD5 66cd9816dc5d99358e756e4169cdaccb
BLAKE2b-256 3af7d073dc0914c89b97bbcf6b087f9e83c913853d96795a934d958099552196

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for regex-2023.3.23-cp39-cp39-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl
Algorithm Hash digest
SHA256 e152461e9a0aedec7d37fc66ec0fa635eca984777d3d3c3e36f53bf3d3ceb16e
MD5 fe63cfae301e60e907f26f2d40065a96
BLAKE2b-256 3214cef8e14cf732f723951ad2bcf38965b01acd3819204831116a96946690d6

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for regex-2023.3.23-cp39-cp39-macosx_11_0_arm64.whl
Algorithm Hash digest
SHA256 6560776ec19c83f3645bbc5db64a7a5816c9d8fb7ed7201c5bcd269323d88072
MD5 1475dd44a605746f26e40b63f8fd92b7
BLAKE2b-256 0664ae837863a7490e30b5da4659f5d9709980e45031f1563c5a4d4bb6668a36

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for regex-2023.3.23-cp39-cp39-macosx_10_9_x86_64.whl
Algorithm Hash digest
SHA256 c88e8c226473b5549fe9616980ea7ca09289246cfbdf469241edf4741a620004
MD5 08daab81074087cba57349fd16b3bd81
BLAKE2b-256 b6c07ac01da1fbe7c92a3684757476f3b2b060d7f21ab4cb70ed1fedb63719eb

See more details on using hashes here.

File details

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

File metadata

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

File hashes

Hashes for regex-2023.3.23-cp38-cp38-win_amd64.whl
Algorithm Hash digest
SHA256 dbb3f87e15d3dd76996d604af8678316ad2d7d20faa394e92d9394dfd621fd0c
MD5 09e69546a47b8ac2fa2e0a20e4e21521
BLAKE2b-256 80380cb4cb0ba49f7bbf25225689ae58d8232997a33fe193950025f7df733474

See more details on using hashes here.

File details

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

File metadata

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

File hashes

Hashes for regex-2023.3.23-cp38-cp38-win32.whl
Algorithm Hash digest
SHA256 fffe57312a358be6ec6baeb43d253c36e5790e436b7bf5b7a38df360363e88e9
MD5 33475b507019adc1fc696f4984c81ecf
BLAKE2b-256 07dc5366a12c377a1cf905d936a31139d80d279110a4616a14b24cc48e658eae

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for regex-2023.3.23-cp38-cp38-musllinux_1_1_x86_64.whl
Algorithm Hash digest
SHA256 cd1671e9d5ac05ce6aa86874dd8dfa048824d1dbe73060851b310c6c1a201a96
MD5 76e462501243d36387a53a4df19876a7
BLAKE2b-256 9c31c22dc60971e0dddaf86375502fcf171cfce33013f58a7407529fecab6d8c

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for regex-2023.3.23-cp38-cp38-musllinux_1_1_s390x.whl
Algorithm Hash digest
SHA256 c125a02d22c555e68f7433bac8449992fa1cead525399f14e47c2d98f2f0e467
MD5 999128e1f52eb531d87ff886843355ba
BLAKE2b-256 34b1be831936f5acf8127d2624a300e89a5c0dc5c3a76a335be8d85534cc7728

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for regex-2023.3.23-cp38-cp38-musllinux_1_1_ppc64le.whl
Algorithm Hash digest
SHA256 2848bf76673c83314068241c8d5b7fa9ad9bed866c979875a0e84039349e8fa7
MD5 e2fcb49b1e06180acab87b1292933615
BLAKE2b-256 5882ff6778eb678d5758df44fa3a51cbacbe4352d05386c0957b44203e574628

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for regex-2023.3.23-cp38-cp38-musllinux_1_1_i686.whl
Algorithm Hash digest
SHA256 cf86b4328c204c3f315074a61bc1c06f8a75a8e102359f18ce99fbcbbf1951f0
MD5 e2fc1739722221dccd857b480b82a92f
BLAKE2b-256 42601694cef16929dc1c7831fee0d8a25d81de741d7baf424b633e8c9597ebbb

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for regex-2023.3.23-cp38-cp38-musllinux_1_1_aarch64.whl
Algorithm Hash digest
SHA256 9bf4a5626f2a0ea006bf81e8963f498a57a47d58907eaa58f4b3e13be68759d8
MD5 cebc884bdca350abb8ab28c59a3c7e4b
BLAKE2b-256 647e5f748fb16ac16c919a6ee9c5623d622914fe4bf99a0f51f8524a88a9f421

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for regex-2023.3.23-cp38-cp38-manylinux_2_17_x86_64.manylinux2014_x86_64.whl
Algorithm Hash digest
SHA256 86b036f401895e854de9fefe061518e78d506d8a919cc250dc3416bca03f6f9a
MD5 d754495cd0197a708b19331dc95be023
BLAKE2b-256 7471abf5df0be7a29b6920d4ae85eb685584afbe84610631b70fe366b2857801

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for regex-2023.3.23-cp38-cp38-manylinux_2_17_s390x.manylinux2014_s390x.whl
Algorithm Hash digest
SHA256 c07ce8e9eee878a48ebeb32ee661b49504b85e164b05bebf25420705709fdd31
MD5 e96ffdc01b9dc5744b162dcaac9f5ae4
BLAKE2b-256 e200092e2537588afa89928fa98d0b7363461336bda5b57479158fb6c4ffbdfd

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for regex-2023.3.23-cp38-cp38-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl
Algorithm Hash digest
SHA256 79e29fd62fa2f597a6754b247356bda14b866131a22444d67f907d6d341e10f3
MD5 f1644395f3a33107dfe2fb5f40379a97
BLAKE2b-256 6b2bd3a33a47805c64e15f3a3b092ce4a55c8720249b80aa5f72b77b541b0df5

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for regex-2023.3.23-cp38-cp38-manylinux_2_17_aarch64.manylinux2014_aarch64.whl
Algorithm Hash digest
SHA256 086afe222d58b88b62847bdbd92079b4699350b4acab892f88a935db5707c790
MD5 66ab11e7c6d0ca9914e56532131ba2b3
BLAKE2b-256 24f59e07cde4587dc3d5612ed39980ac3379359a971405a78837065bffa1dbe0

See more details on using hashes here.

File details

Details for the file regex-2023.3.23-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-2023.3.23-cp38-cp38-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_12_x86_64.manylinux2010_x86_64.whl
Algorithm Hash digest
SHA256 539dd010dc35af935b32f248099e38447bbffc10b59c2b542bceead2bed5c325
MD5 999139b6c4db2d90a6b3f7ee4a1e7e79
BLAKE2b-256 f429950eeaafdc6165b4d2212ae52f34da0f8035ca351877e45622d04afaa953

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for regex-2023.3.23-cp38-cp38-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl
Algorithm Hash digest
SHA256 78ac8dd8e18800bb1f97aad0d73f68916592dddf233b99d2b5cabc562088503a
MD5 fc57f027beeb2cf216c381268dee07eb
BLAKE2b-256 e7598d84338a75457e1450a648e3c588efe35191157ecf3ef7d46deac3af0347

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for regex-2023.3.23-cp38-cp38-macosx_11_0_arm64.whl
Algorithm Hash digest
SHA256 a610e0adfcb0fc84ea25f6ea685e39e74cbcd9245a72a9a7aab85ff755a5ed27
MD5 be4ab696d38a57034ae0cd3391817945
BLAKE2b-256 c64e1aa518dd6dc23b1e1a7763d3f31fbd900146eada71d8dad0a1d7758302ac

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for regex-2023.3.23-cp38-cp38-macosx_10_9_x86_64.whl
Algorithm Hash digest
SHA256 6572ff287176c0fb96568adb292674b421fa762153ed074d94b1d939ed92c253
MD5 900355c7a7fef776d27868370549e7a1
BLAKE2b-256 d4093e487710dec97906fd18df0ed93040b477e9c3ff6cdbc5f99caa256c891a

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