annotate Lib/pre.py @ 27998:e27f58a50737 legacy-trunk

SF bug #690377: Dud footnote reference in distutils docs
author Raymond Hettinger <python@rcn.com>
date Fri, 21 Feb 2003 02:47:09 +0000
parents 5b508ce049f5
children 14f65d661084
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
rev   line source
13229
344ab348f1e9 Switch to sre for regular expression matching (the new mini-re module
Guido van Rossum <guido@python.org>
parents:
diff changeset
1 # module 're' -- A collection of regular expression operations
344ab348f1e9 Switch to sre for regular expression matching (the new mini-re module
Guido van Rossum <guido@python.org>
parents:
diff changeset
2
17021
f0efdcd24512 Make docstrings raw, since they contain literal backslashes.
Ka-Ping Yee <ping@zesty.ca>
parents: 16613
diff changeset
3 r"""Support for regular expressions (RE).
13229
344ab348f1e9 Switch to sre for regular expression matching (the new mini-re module
Guido van Rossum <guido@python.org>
parents:
diff changeset
4
344ab348f1e9 Switch to sre for regular expression matching (the new mini-re module
Guido van Rossum <guido@python.org>
parents:
diff changeset
5 This module provides regular expression matching operations similar to
344ab348f1e9 Switch to sre for regular expression matching (the new mini-re module
Guido van Rossum <guido@python.org>
parents:
diff changeset
6 those found in Perl. It's 8-bit clean: the strings being processed may
344ab348f1e9 Switch to sre for regular expression matching (the new mini-re module
Guido van Rossum <guido@python.org>
parents:
diff changeset
7 contain both null bytes and characters whose high bit is set. Regular
344ab348f1e9 Switch to sre for regular expression matching (the new mini-re module
Guido van Rossum <guido@python.org>
parents:
diff changeset
8 expression pattern strings may not contain null bytes, but can specify
344ab348f1e9 Switch to sre for regular expression matching (the new mini-re module
Guido van Rossum <guido@python.org>
parents:
diff changeset
9 the null byte using the \\number notation. Characters with the high
344ab348f1e9 Switch to sre for regular expression matching (the new mini-re module
Guido van Rossum <guido@python.org>
parents:
diff changeset
10 bit set may be included.
344ab348f1e9 Switch to sre for regular expression matching (the new mini-re module
Guido van Rossum <guido@python.org>
parents:
diff changeset
11
344ab348f1e9 Switch to sre for regular expression matching (the new mini-re module
Guido van Rossum <guido@python.org>
parents:
diff changeset
12 Regular expressions can contain both special and ordinary
344ab348f1e9 Switch to sre for regular expression matching (the new mini-re module
Guido van Rossum <guido@python.org>
parents:
diff changeset
13 characters. Most ordinary characters, like "A", "a", or "0", are the
344ab348f1e9 Switch to sre for regular expression matching (the new mini-re module
Guido van Rossum <guido@python.org>
parents:
diff changeset
14 simplest regular expressions; they simply match themselves. You can
344ab348f1e9 Switch to sre for regular expression matching (the new mini-re module
Guido van Rossum <guido@python.org>
parents:
diff changeset
15 concatenate ordinary characters, so last matches the string 'last'.
344ab348f1e9 Switch to sre for regular expression matching (the new mini-re module
Guido van Rossum <guido@python.org>
parents:
diff changeset
16
344ab348f1e9 Switch to sre for regular expression matching (the new mini-re module
Guido van Rossum <guido@python.org>
parents:
diff changeset
17 The special characters are:
344ab348f1e9 Switch to sre for regular expression matching (the new mini-re module
Guido van Rossum <guido@python.org>
parents:
diff changeset
18 "." Matches any character except a newline.
344ab348f1e9 Switch to sre for regular expression matching (the new mini-re module
Guido van Rossum <guido@python.org>
parents:
diff changeset
19 "^" Matches the start of the string.
344ab348f1e9 Switch to sre for regular expression matching (the new mini-re module
Guido van Rossum <guido@python.org>
parents:
diff changeset
20 "$" Matches the end of the string.
344ab348f1e9 Switch to sre for regular expression matching (the new mini-re module
Guido van Rossum <guido@python.org>
parents:
diff changeset
21 "*" Matches 0 or more (greedy) repetitions of the preceding RE.
344ab348f1e9 Switch to sre for regular expression matching (the new mini-re module
Guido van Rossum <guido@python.org>
parents:
diff changeset
22 Greedy means that it will match as many repetitions as possible.
344ab348f1e9 Switch to sre for regular expression matching (the new mini-re module
Guido van Rossum <guido@python.org>
parents:
diff changeset
23 "+" Matches 1 or more (greedy) repetitions of the preceding RE.
344ab348f1e9 Switch to sre for regular expression matching (the new mini-re module
Guido van Rossum <guido@python.org>
parents:
diff changeset
24 "?" Matches 0 or 1 (greedy) of the preceding RE.
344ab348f1e9 Switch to sre for regular expression matching (the new mini-re module
Guido van Rossum <guido@python.org>
parents:
diff changeset
25 *?,+?,?? Non-greedy versions of the previous three special characters.
344ab348f1e9 Switch to sre for regular expression matching (the new mini-re module
Guido van Rossum <guido@python.org>
parents:
diff changeset
26 {m,n} Matches from m to n repetitions of the preceding RE.
344ab348f1e9 Switch to sre for regular expression matching (the new mini-re module
Guido van Rossum <guido@python.org>
parents:
diff changeset
27 {m,n}? Non-greedy version of the above.
344ab348f1e9 Switch to sre for regular expression matching (the new mini-re module
Guido van Rossum <guido@python.org>
parents:
diff changeset
28 "\\" Either escapes special characters or signals a special sequence.
344ab348f1e9 Switch to sre for regular expression matching (the new mini-re module
Guido van Rossum <guido@python.org>
parents:
diff changeset
29 [] Indicates a set of characters.
344ab348f1e9 Switch to sre for regular expression matching (the new mini-re module
Guido van Rossum <guido@python.org>
parents:
diff changeset
30 A "^" as the first character indicates a complementing set.
344ab348f1e9 Switch to sre for regular expression matching (the new mini-re module
Guido van Rossum <guido@python.org>
parents:
diff changeset
31 "|" A|B, creates an RE that will match either A or B.
344ab348f1e9 Switch to sre for regular expression matching (the new mini-re module
Guido van Rossum <guido@python.org>
parents:
diff changeset
32 (...) Matches the RE inside the parentheses.
344ab348f1e9 Switch to sre for regular expression matching (the new mini-re module
Guido van Rossum <guido@python.org>
parents:
diff changeset
33 The contents can be retrieved or matched later in the string.
344ab348f1e9 Switch to sre for regular expression matching (the new mini-re module
Guido van Rossum <guido@python.org>
parents:
diff changeset
34 (?iLmsx) Set the I, L, M, S, or X flag for the RE.
344ab348f1e9 Switch to sre for regular expression matching (the new mini-re module
Guido van Rossum <guido@python.org>
parents:
diff changeset
35 (?:...) Non-grouping version of regular parentheses.
344ab348f1e9 Switch to sre for regular expression matching (the new mini-re module
Guido van Rossum <guido@python.org>
parents:
diff changeset
36 (?P<name>...) The substring matched by the group is accessible by name.
344ab348f1e9 Switch to sre for regular expression matching (the new mini-re module
Guido van Rossum <guido@python.org>
parents:
diff changeset
37 (?P=name) Matches the text matched earlier by the group named name.
344ab348f1e9 Switch to sre for regular expression matching (the new mini-re module
Guido van Rossum <guido@python.org>
parents:
diff changeset
38 (?#...) A comment; ignored.
344ab348f1e9 Switch to sre for regular expression matching (the new mini-re module
Guido van Rossum <guido@python.org>
parents:
diff changeset
39 (?=...) Matches if ... matches next, but doesn't consume the string.
344ab348f1e9 Switch to sre for regular expression matching (the new mini-re module
Guido van Rossum <guido@python.org>
parents:
diff changeset
40 (?!...) Matches if ... doesn't match next.
344ab348f1e9 Switch to sre for regular expression matching (the new mini-re module
Guido van Rossum <guido@python.org>
parents:
diff changeset
41
344ab348f1e9 Switch to sre for regular expression matching (the new mini-re module
Guido van Rossum <guido@python.org>
parents:
diff changeset
42 The special sequences consist of "\\" and a character from the list
344ab348f1e9 Switch to sre for regular expression matching (the new mini-re module
Guido van Rossum <guido@python.org>
parents:
diff changeset
43 below. If the ordinary character is not on the list, then the
344ab348f1e9 Switch to sre for regular expression matching (the new mini-re module
Guido van Rossum <guido@python.org>
parents:
diff changeset
44 resulting RE will match the second character.
344ab348f1e9 Switch to sre for regular expression matching (the new mini-re module
Guido van Rossum <guido@python.org>
parents:
diff changeset
45 \\number Matches the contents of the group of the same number.
344ab348f1e9 Switch to sre for regular expression matching (the new mini-re module
Guido van Rossum <guido@python.org>
parents:
diff changeset
46 \\A Matches only at the start of the string.
15870
010d03853546 Whitespace normalization.
Tim Peters <tim.peters@gmail.com>
parents: 14396
diff changeset
47 \\Z Matches only at the end of the string.
13229
344ab348f1e9 Switch to sre for regular expression matching (the new mini-re module
Guido van Rossum <guido@python.org>
parents:
diff changeset
48 \\b Matches the empty string, but only at the start or end of a word.
344ab348f1e9 Switch to sre for regular expression matching (the new mini-re module
Guido van Rossum <guido@python.org>
parents:
diff changeset
49 \\B Matches the empty string, but not at the start or end of a word.
344ab348f1e9 Switch to sre for regular expression matching (the new mini-re module
Guido van Rossum <guido@python.org>
parents:
diff changeset
50 \\d Matches any decimal digit; equivalent to the set [0-9].
344ab348f1e9 Switch to sre for regular expression matching (the new mini-re module
Guido van Rossum <guido@python.org>
parents:
diff changeset
51 \\D Matches any non-digit character; equivalent to the set [^0-9].
344ab348f1e9 Switch to sre for regular expression matching (the new mini-re module
Guido van Rossum <guido@python.org>
parents:
diff changeset
52 \\s Matches any whitespace character; equivalent to [ \\t\\n\\r\\f\\v].
344ab348f1e9 Switch to sre for regular expression matching (the new mini-re module
Guido van Rossum <guido@python.org>
parents:
diff changeset
53 \\S Matches any non-whitespace character; equiv. to [^ \\t\\n\\r\\f\\v].
344ab348f1e9 Switch to sre for regular expression matching (the new mini-re module
Guido van Rossum <guido@python.org>
parents:
diff changeset
54 \\w Matches any alphanumeric character; equivalent to [a-zA-Z0-9_].
344ab348f1e9 Switch to sre for regular expression matching (the new mini-re module
Guido van Rossum <guido@python.org>
parents:
diff changeset
55 With LOCALE, it will match the set [0-9_] plus characters defined
344ab348f1e9 Switch to sre for regular expression matching (the new mini-re module
Guido van Rossum <guido@python.org>
parents:
diff changeset
56 as letters for the current locale.
344ab348f1e9 Switch to sre for regular expression matching (the new mini-re module
Guido van Rossum <guido@python.org>
parents:
diff changeset
57 \\W Matches the complement of \\w.
15870
010d03853546 Whitespace normalization.
Tim Peters <tim.peters@gmail.com>
parents: 14396
diff changeset
58 \\\\ Matches a literal backslash.
13229
344ab348f1e9 Switch to sre for regular expression matching (the new mini-re module
Guido van Rossum <guido@python.org>
parents:
diff changeset
59
344ab348f1e9 Switch to sre for regular expression matching (the new mini-re module
Guido van Rossum <guido@python.org>
parents:
diff changeset
60 This module exports the following functions:
344ab348f1e9 Switch to sre for regular expression matching (the new mini-re module
Guido van Rossum <guido@python.org>
parents:
diff changeset
61 match Match a regular expression pattern to the beginning of a string.
344ab348f1e9 Switch to sre for regular expression matching (the new mini-re module
Guido van Rossum <guido@python.org>
parents:
diff changeset
62 search Search a string for the presence of a pattern.
344ab348f1e9 Switch to sre for regular expression matching (the new mini-re module
Guido van Rossum <guido@python.org>
parents:
diff changeset
63 sub Substitute occurrences of a pattern found in a string.
344ab348f1e9 Switch to sre for regular expression matching (the new mini-re module
Guido van Rossum <guido@python.org>
parents:
diff changeset
64 subn Same as sub, but also return the number of substitutions made.
344ab348f1e9 Switch to sre for regular expression matching (the new mini-re module
Guido van Rossum <guido@python.org>
parents:
diff changeset
65 split Split a string by the occurrences of a pattern.
344ab348f1e9 Switch to sre for regular expression matching (the new mini-re module
Guido van Rossum <guido@python.org>
parents:
diff changeset
66 findall Find all occurrences of a pattern in a string.
344ab348f1e9 Switch to sre for regular expression matching (the new mini-re module
Guido van Rossum <guido@python.org>
parents:
diff changeset
67 compile Compile a pattern into a RegexObject.
344ab348f1e9 Switch to sre for regular expression matching (the new mini-re module
Guido van Rossum <guido@python.org>
parents:
diff changeset
68 escape Backslash all non-alphanumerics in a string.
344ab348f1e9 Switch to sre for regular expression matching (the new mini-re module
Guido van Rossum <guido@python.org>
parents:
diff changeset
69
344ab348f1e9 Switch to sre for regular expression matching (the new mini-re module
Guido van Rossum <guido@python.org>
parents:
diff changeset
70 This module exports the following classes:
344ab348f1e9 Switch to sre for regular expression matching (the new mini-re module
Guido van Rossum <guido@python.org>
parents:
diff changeset
71 RegexObject Holds a compiled regular expression pattern.
344ab348f1e9 Switch to sre for regular expression matching (the new mini-re module
Guido van Rossum <guido@python.org>
parents:
diff changeset
72 MatchObject Contains information about pattern matches.
344ab348f1e9 Switch to sre for regular expression matching (the new mini-re module
Guido van Rossum <guido@python.org>
parents:
diff changeset
73
344ab348f1e9 Switch to sre for regular expression matching (the new mini-re module
Guido van Rossum <guido@python.org>
parents:
diff changeset
74 Some of the functions in this module takes flags as optional parameters:
344ab348f1e9 Switch to sre for regular expression matching (the new mini-re module
Guido van Rossum <guido@python.org>
parents:
diff changeset
75 I IGNORECASE Perform case-insensitive matching.
344ab348f1e9 Switch to sre for regular expression matching (the new mini-re module
Guido van Rossum <guido@python.org>
parents:
diff changeset
76 L LOCALE Make \w, \W, \b, \B, dependent on the current locale.
344ab348f1e9 Switch to sre for regular expression matching (the new mini-re module
Guido van Rossum <guido@python.org>
parents:
diff changeset
77 M MULTILINE "^" matches the beginning of lines as well as the string.
344ab348f1e9 Switch to sre for regular expression matching (the new mini-re module
Guido van Rossum <guido@python.org>
parents:
diff changeset
78 "$" matches the end of lines as well as the string.
344ab348f1e9 Switch to sre for regular expression matching (the new mini-re module
Guido van Rossum <guido@python.org>
parents:
diff changeset
79 S DOTALL "." matches any character at all, including the newline.
13620
5b727ab37092 Spelling fixes supplied by Rob W. W. Hooft. All these are fixes in either
Thomas Wouters <thomas@python.org>
parents: 13229
diff changeset
80 X VERBOSE Ignore whitespace and comments for nicer looking RE's.
13229
344ab348f1e9 Switch to sre for regular expression matching (the new mini-re module
Guido van Rossum <guido@python.org>
parents:
diff changeset
81
344ab348f1e9 Switch to sre for regular expression matching (the new mini-re module
Guido van Rossum <guido@python.org>
parents:
diff changeset
82 This module also defines an exception 'error'.
344ab348f1e9 Switch to sre for regular expression matching (the new mini-re module
Guido van Rossum <guido@python.org>
parents:
diff changeset
83
344ab348f1e9 Switch to sre for regular expression matching (the new mini-re module
Guido van Rossum <guido@python.org>
parents:
diff changeset
84 """
344ab348f1e9 Switch to sre for regular expression matching (the new mini-re module
Guido van Rossum <guido@python.org>
parents:
diff changeset
85
344ab348f1e9 Switch to sre for regular expression matching (the new mini-re module
Guido van Rossum <guido@python.org>
parents:
diff changeset
86
344ab348f1e9 Switch to sre for regular expression matching (the new mini-re module
Guido van Rossum <guido@python.org>
parents:
diff changeset
87 import sys
344ab348f1e9 Switch to sre for regular expression matching (the new mini-re module
Guido van Rossum <guido@python.org>
parents:
diff changeset
88 from pcre import *
344ab348f1e9 Switch to sre for regular expression matching (the new mini-re module
Guido van Rossum <guido@python.org>
parents:
diff changeset
89
22944
50c9c241463d Add deprecation warning to 'pre' module
Andrew M. Kuchling <amk@amk.ca>
parents: 17799
diff changeset
90 # XXX This module is deprecated as of Python 2.3, and should be removed
50c9c241463d Add deprecation warning to 'pre' module
Andrew M. Kuchling <amk@amk.ca>
parents: 17799
diff changeset
91 # in the version that follows 2.3.
50c9c241463d Add deprecation warning to 'pre' module
Andrew M. Kuchling <amk@amk.ca>
parents: 17799
diff changeset
92 import warnings as _warnings
50c9c241463d Add deprecation warning to 'pre' module
Andrew M. Kuchling <amk@amk.ca>
parents: 17799
diff changeset
93 _warnings.warn("Please use the 're' module, not the 'pre' module",
50c9c241463d Add deprecation warning to 'pre' module
Andrew M. Kuchling <amk@amk.ca>
parents: 17799
diff changeset
94 DeprecationWarning)
23075
b7e87732f6ab Whitespace normalization.
Tim Peters <tim.peters@gmail.com>
parents: 22944
diff changeset
95
16613
f68dbffff927 bunch more __all__ lists
Skip Montanaro <skip@pobox.com>
parents: 16562
diff changeset
96 __all__ = ["match","search","sub","subn","split","findall","escape","compile",
f68dbffff927 bunch more __all__ lists
Skip Montanaro <skip@pobox.com>
parents: 16562
diff changeset
97 "I","L","M","S","X","IGNORECASE","LOCALE","MULTILINE","DOTALL",
f68dbffff927 bunch more __all__ lists
Skip Montanaro <skip@pobox.com>
parents: 16562
diff changeset
98 "VERBOSE","error"]
16562
623456576d6a __all__ for several more modules
Skip Montanaro <skip@pobox.com>
parents: 16548
diff changeset
99
13229
344ab348f1e9 Switch to sre for regular expression matching (the new mini-re module
Guido van Rossum <guido@python.org>
parents:
diff changeset
100 #
344ab348f1e9 Switch to sre for regular expression matching (the new mini-re module
Guido van Rossum <guido@python.org>
parents:
diff changeset
101 # First, the public part of the interface:
344ab348f1e9 Switch to sre for regular expression matching (the new mini-re module
Guido van Rossum <guido@python.org>
parents:
diff changeset
102 #
344ab348f1e9 Switch to sre for regular expression matching (the new mini-re module
Guido van Rossum <guido@python.org>
parents:
diff changeset
103
344ab348f1e9 Switch to sre for regular expression matching (the new mini-re module
Guido van Rossum <guido@python.org>
parents:
diff changeset
104 # pcre.error and re.error should be the same, since exceptions can be
344ab348f1e9 Switch to sre for regular expression matching (the new mini-re module
Guido van Rossum <guido@python.org>
parents:
diff changeset
105 # raised from either module.
344ab348f1e9 Switch to sre for regular expression matching (the new mini-re module
Guido van Rossum <guido@python.org>
parents:
diff changeset
106
344ab348f1e9 Switch to sre for regular expression matching (the new mini-re module
Guido van Rossum <guido@python.org>
parents:
diff changeset
107 # compilation flags
344ab348f1e9 Switch to sre for regular expression matching (the new mini-re module
Guido van Rossum <guido@python.org>
parents:
diff changeset
108
344ab348f1e9 Switch to sre for regular expression matching (the new mini-re module
Guido van Rossum <guido@python.org>
parents:
diff changeset
109 I = IGNORECASE
344ab348f1e9 Switch to sre for regular expression matching (the new mini-re module
Guido van Rossum <guido@python.org>
parents:
diff changeset
110 L = LOCALE
344ab348f1e9 Switch to sre for regular expression matching (the new mini-re module
Guido van Rossum <guido@python.org>
parents:
diff changeset
111 M = MULTILINE
15870
010d03853546 Whitespace normalization.
Tim Peters <tim.peters@gmail.com>
parents: 14396
diff changeset
112 S = DOTALL
010d03853546 Whitespace normalization.
Tim Peters <tim.peters@gmail.com>
parents: 14396
diff changeset
113 X = VERBOSE
13229
344ab348f1e9 Switch to sre for regular expression matching (the new mini-re module
Guido van Rossum <guido@python.org>
parents:
diff changeset
114
344ab348f1e9 Switch to sre for regular expression matching (the new mini-re module
Guido van Rossum <guido@python.org>
parents:
diff changeset
115
344ab348f1e9 Switch to sre for regular expression matching (the new mini-re module
Guido van Rossum <guido@python.org>
parents:
diff changeset
116 #
344ab348f1e9 Switch to sre for regular expression matching (the new mini-re module
Guido van Rossum <guido@python.org>
parents:
diff changeset
117 #
344ab348f1e9 Switch to sre for regular expression matching (the new mini-re module
Guido van Rossum <guido@python.org>
parents:
diff changeset
118 #
344ab348f1e9 Switch to sre for regular expression matching (the new mini-re module
Guido van Rossum <guido@python.org>
parents:
diff changeset
119
344ab348f1e9 Switch to sre for regular expression matching (the new mini-re module
Guido van Rossum <guido@python.org>
parents:
diff changeset
120 _cache = {}
344ab348f1e9 Switch to sre for regular expression matching (the new mini-re module
Guido van Rossum <guido@python.org>
parents:
diff changeset
121 _MAXCACHE = 20
344ab348f1e9 Switch to sre for regular expression matching (the new mini-re module
Guido van Rossum <guido@python.org>
parents:
diff changeset
122
344ab348f1e9 Switch to sre for regular expression matching (the new mini-re module
Guido van Rossum <guido@python.org>
parents:
diff changeset
123 def _cachecompile(pattern, flags=0):
344ab348f1e9 Switch to sre for regular expression matching (the new mini-re module
Guido van Rossum <guido@python.org>
parents:
diff changeset
124 key = (pattern, flags)
344ab348f1e9 Switch to sre for regular expression matching (the new mini-re module
Guido van Rossum <guido@python.org>
parents:
diff changeset
125 try:
344ab348f1e9 Switch to sre for regular expression matching (the new mini-re module
Guido van Rossum <guido@python.org>
parents:
diff changeset
126 return _cache[key]
344ab348f1e9 Switch to sre for regular expression matching (the new mini-re module
Guido van Rossum <guido@python.org>
parents:
diff changeset
127 except KeyError:
344ab348f1e9 Switch to sre for regular expression matching (the new mini-re module
Guido van Rossum <guido@python.org>
parents:
diff changeset
128 pass
344ab348f1e9 Switch to sre for regular expression matching (the new mini-re module
Guido van Rossum <guido@python.org>
parents:
diff changeset
129 value = compile(pattern, flags)
344ab348f1e9 Switch to sre for regular expression matching (the new mini-re module
Guido van Rossum <guido@python.org>
parents:
diff changeset
130 if len(_cache) >= _MAXCACHE:
344ab348f1e9 Switch to sre for regular expression matching (the new mini-re module
Guido van Rossum <guido@python.org>
parents:
diff changeset
131 _cache.clear()
344ab348f1e9 Switch to sre for regular expression matching (the new mini-re module
Guido van Rossum <guido@python.org>
parents:
diff changeset
132 _cache[key] = value
344ab348f1e9 Switch to sre for regular expression matching (the new mini-re module
Guido van Rossum <guido@python.org>
parents:
diff changeset
133 return value
344ab348f1e9 Switch to sre for regular expression matching (the new mini-re module
Guido van Rossum <guido@python.org>
parents:
diff changeset
134
344ab348f1e9 Switch to sre for regular expression matching (the new mini-re module
Guido van Rossum <guido@python.org>
parents:
diff changeset
135 def match(pattern, string, flags=0):
344ab348f1e9 Switch to sre for regular expression matching (the new mini-re module
Guido van Rossum <guido@python.org>
parents:
diff changeset
136 """match (pattern, string[, flags]) -> MatchObject or None
15870
010d03853546 Whitespace normalization.
Tim Peters <tim.peters@gmail.com>
parents: 14396
diff changeset
137
13229
344ab348f1e9 Switch to sre for regular expression matching (the new mini-re module
Guido van Rossum <guido@python.org>
parents:
diff changeset
138 If zero or more characters at the beginning of string match the
344ab348f1e9 Switch to sre for regular expression matching (the new mini-re module
Guido van Rossum <guido@python.org>
parents:
diff changeset
139 regular expression pattern, return a corresponding MatchObject
344ab348f1e9 Switch to sre for regular expression matching (the new mini-re module
Guido van Rossum <guido@python.org>
parents:
diff changeset
140 instance. Return None if the string does not match the pattern;
344ab348f1e9 Switch to sre for regular expression matching (the new mini-re module
Guido van Rossum <guido@python.org>
parents:
diff changeset
141 note that this is different from a zero-length match.
344ab348f1e9 Switch to sre for regular expression matching (the new mini-re module
Guido van Rossum <guido@python.org>
parents:
diff changeset
142
344ab348f1e9 Switch to sre for regular expression matching (the new mini-re module
Guido van Rossum <guido@python.org>
parents:
diff changeset
143 Note: If you want to locate a match anywhere in string, use
344ab348f1e9 Switch to sre for regular expression matching (the new mini-re module
Guido van Rossum <guido@python.org>
parents:
diff changeset
144 search() instead.
344ab348f1e9 Switch to sre for regular expression matching (the new mini-re module
Guido van Rossum <guido@python.org>
parents:
diff changeset
145
344ab348f1e9 Switch to sre for regular expression matching (the new mini-re module
Guido van Rossum <guido@python.org>
parents:
diff changeset
146 """
15870
010d03853546 Whitespace normalization.
Tim Peters <tim.peters@gmail.com>
parents: 14396
diff changeset
147
13229
344ab348f1e9 Switch to sre for regular expression matching (the new mini-re module
Guido van Rossum <guido@python.org>
parents:
diff changeset
148 return _cachecompile(pattern, flags).match(string)
15870
010d03853546 Whitespace normalization.
Tim Peters <tim.peters@gmail.com>
parents: 14396
diff changeset
149
13229
344ab348f1e9 Switch to sre for regular expression matching (the new mini-re module
Guido van Rossum <guido@python.org>
parents:
diff changeset
150 def search(pattern, string, flags=0):
344ab348f1e9 Switch to sre for regular expression matching (the new mini-re module
Guido van Rossum <guido@python.org>
parents:
diff changeset
151 """search (pattern, string[, flags]) -> MatchObject or None
15870
010d03853546 Whitespace normalization.
Tim Peters <tim.peters@gmail.com>
parents: 14396
diff changeset
152
13229
344ab348f1e9 Switch to sre for regular expression matching (the new mini-re module
Guido van Rossum <guido@python.org>
parents:
diff changeset
153 Scan through string looking for a location where the regular
344ab348f1e9 Switch to sre for regular expression matching (the new mini-re module
Guido van Rossum <guido@python.org>
parents:
diff changeset
154 expression pattern produces a match, and return a corresponding
344ab348f1e9 Switch to sre for regular expression matching (the new mini-re module
Guido van Rossum <guido@python.org>
parents:
diff changeset
155 MatchObject instance. Return None if no position in the string
344ab348f1e9 Switch to sre for regular expression matching (the new mini-re module
Guido van Rossum <guido@python.org>
parents:
diff changeset
156 matches the pattern; note that this is different from finding a
344ab348f1e9 Switch to sre for regular expression matching (the new mini-re module
Guido van Rossum <guido@python.org>
parents:
diff changeset
157 zero-length match at some point in the string.
344ab348f1e9 Switch to sre for regular expression matching (the new mini-re module
Guido van Rossum <guido@python.org>
parents:
diff changeset
158
344ab348f1e9 Switch to sre for regular expression matching (the new mini-re module
Guido van Rossum <guido@python.org>
parents:
diff changeset
159 """
344ab348f1e9 Switch to sre for regular expression matching (the new mini-re module
Guido van Rossum <guido@python.org>
parents:
diff changeset
160 return _cachecompile(pattern, flags).search(string)
15870
010d03853546 Whitespace normalization.
Tim Peters <tim.peters@gmail.com>
parents: 14396
diff changeset
161
13229
344ab348f1e9 Switch to sre for regular expression matching (the new mini-re module
Guido van Rossum <guido@python.org>
parents:
diff changeset
162 def sub(pattern, repl, string, count=0):
344ab348f1e9 Switch to sre for regular expression matching (the new mini-re module
Guido van Rossum <guido@python.org>
parents:
diff changeset
163 """sub(pattern, repl, string[, count=0]) -> string
15870
010d03853546 Whitespace normalization.
Tim Peters <tim.peters@gmail.com>
parents: 14396
diff changeset
164
13229
344ab348f1e9 Switch to sre for regular expression matching (the new mini-re module
Guido van Rossum <guido@python.org>
parents:
diff changeset
165 Return the string obtained by replacing the leftmost
344ab348f1e9 Switch to sre for regular expression matching (the new mini-re module
Guido van Rossum <guido@python.org>
parents:
diff changeset
166 non-overlapping occurrences of pattern in string by the
344ab348f1e9 Switch to sre for regular expression matching (the new mini-re module
Guido van Rossum <guido@python.org>
parents:
diff changeset
167 replacement repl. If the pattern isn't found, string is returned
344ab348f1e9 Switch to sre for regular expression matching (the new mini-re module
Guido van Rossum <guido@python.org>
parents:
diff changeset
168 unchanged. repl can be a string or a function; if a function, it
344ab348f1e9 Switch to sre for regular expression matching (the new mini-re module
Guido van Rossum <guido@python.org>
parents:
diff changeset
169 is called for every non-overlapping occurrence of pattern. The
344ab348f1e9 Switch to sre for regular expression matching (the new mini-re module
Guido van Rossum <guido@python.org>
parents:
diff changeset
170 function takes a single match object argument, and returns the
344ab348f1e9 Switch to sre for regular expression matching (the new mini-re module
Guido van Rossum <guido@python.org>
parents:
diff changeset
171 replacement string.
344ab348f1e9 Switch to sre for regular expression matching (the new mini-re module
Guido van Rossum <guido@python.org>
parents:
diff changeset
172
344ab348f1e9 Switch to sre for regular expression matching (the new mini-re module
Guido van Rossum <guido@python.org>
parents:
diff changeset
173 The pattern may be a string or a regex object; if you need to
344ab348f1e9 Switch to sre for regular expression matching (the new mini-re module
Guido van Rossum <guido@python.org>
parents:
diff changeset
174 specify regular expression flags, you must use a regex object, or
344ab348f1e9 Switch to sre for regular expression matching (the new mini-re module
Guido van Rossum <guido@python.org>
parents:
diff changeset
175 use embedded modifiers in a pattern; e.g.
344ab348f1e9 Switch to sre for regular expression matching (the new mini-re module
Guido van Rossum <guido@python.org>
parents:
diff changeset
176 sub("(?i)b+", "x", "bbbb BBBB") returns 'x x'.
344ab348f1e9 Switch to sre for regular expression matching (the new mini-re module
Guido van Rossum <guido@python.org>
parents:
diff changeset
177
344ab348f1e9 Switch to sre for regular expression matching (the new mini-re module
Guido van Rossum <guido@python.org>
parents:
diff changeset
178 The optional argument count is the maximum number of pattern
344ab348f1e9 Switch to sre for regular expression matching (the new mini-re module
Guido van Rossum <guido@python.org>
parents:
diff changeset
179 occurrences to be replaced; count must be a non-negative integer,
344ab348f1e9 Switch to sre for regular expression matching (the new mini-re module
Guido van Rossum <guido@python.org>
parents:
diff changeset
180 and the default value of 0 means to replace all occurrences.
344ab348f1e9 Switch to sre for regular expression matching (the new mini-re module
Guido van Rossum <guido@python.org>
parents:
diff changeset
181
344ab348f1e9 Switch to sre for regular expression matching (the new mini-re module
Guido van Rossum <guido@python.org>
parents:
diff changeset
182 """
344ab348f1e9 Switch to sre for regular expression matching (the new mini-re module
Guido van Rossum <guido@python.org>
parents:
diff changeset
183 if type(pattern) == type(''):
344ab348f1e9 Switch to sre for regular expression matching (the new mini-re module
Guido van Rossum <guido@python.org>
parents:
diff changeset
184 pattern = _cachecompile(pattern)
344ab348f1e9 Switch to sre for regular expression matching (the new mini-re module
Guido van Rossum <guido@python.org>
parents:
diff changeset
185 return pattern.sub(repl, string, count)
344ab348f1e9 Switch to sre for regular expression matching (the new mini-re module
Guido van Rossum <guido@python.org>
parents:
diff changeset
186
344ab348f1e9 Switch to sre for regular expression matching (the new mini-re module
Guido van Rossum <guido@python.org>
parents:
diff changeset
187 def subn(pattern, repl, string, count=0):
344ab348f1e9 Switch to sre for regular expression matching (the new mini-re module
Guido van Rossum <guido@python.org>
parents:
diff changeset
188 """subn(pattern, repl, string[, count=0]) -> (string, num substitutions)
15870
010d03853546 Whitespace normalization.
Tim Peters <tim.peters@gmail.com>
parents: 14396
diff changeset
189
13229
344ab348f1e9 Switch to sre for regular expression matching (the new mini-re module
Guido van Rossum <guido@python.org>
parents:
diff changeset
190 Perform the same operation as sub(), but return a tuple
344ab348f1e9 Switch to sre for regular expression matching (the new mini-re module
Guido van Rossum <guido@python.org>
parents:
diff changeset
191 (new_string, number_of_subs_made).
344ab348f1e9 Switch to sre for regular expression matching (the new mini-re module
Guido van Rossum <guido@python.org>
parents:
diff changeset
192
344ab348f1e9 Switch to sre for regular expression matching (the new mini-re module
Guido van Rossum <guido@python.org>
parents:
diff changeset
193 """
344ab348f1e9 Switch to sre for regular expression matching (the new mini-re module
Guido van Rossum <guido@python.org>
parents:
diff changeset
194 if type(pattern) == type(''):
344ab348f1e9 Switch to sre for regular expression matching (the new mini-re module
Guido van Rossum <guido@python.org>
parents:
diff changeset
195 pattern = _cachecompile(pattern)
344ab348f1e9 Switch to sre for regular expression matching (the new mini-re module
Guido van Rossum <guido@python.org>
parents:
diff changeset
196 return pattern.subn(repl, string, count)
15870
010d03853546 Whitespace normalization.
Tim Peters <tim.peters@gmail.com>
parents: 14396
diff changeset
197
13229
344ab348f1e9 Switch to sre for regular expression matching (the new mini-re module
Guido van Rossum <guido@python.org>
parents:
diff changeset
198 def split(pattern, string, maxsplit=0):
344ab348f1e9 Switch to sre for regular expression matching (the new mini-re module
Guido van Rossum <guido@python.org>
parents:
diff changeset
199 """split(pattern, string[, maxsplit=0]) -> list of strings
15870
010d03853546 Whitespace normalization.
Tim Peters <tim.peters@gmail.com>
parents: 14396
diff changeset
200
13229
344ab348f1e9 Switch to sre for regular expression matching (the new mini-re module
Guido van Rossum <guido@python.org>
parents:
diff changeset
201 Split string by the occurrences of pattern. If capturing
344ab348f1e9 Switch to sre for regular expression matching (the new mini-re module
Guido van Rossum <guido@python.org>
parents:
diff changeset
202 parentheses are used in pattern, then the text of all groups in
344ab348f1e9 Switch to sre for regular expression matching (the new mini-re module
Guido van Rossum <guido@python.org>
parents:
diff changeset
203 the pattern are also returned as part of the resulting list. If
344ab348f1e9 Switch to sre for regular expression matching (the new mini-re module
Guido van Rossum <guido@python.org>
parents:
diff changeset
204 maxsplit is nonzero, at most maxsplit splits occur, and the
344ab348f1e9 Switch to sre for regular expression matching (the new mini-re module
Guido van Rossum <guido@python.org>
parents:
diff changeset
205 remainder of the string is returned as the final element of the
344ab348f1e9 Switch to sre for regular expression matching (the new mini-re module
Guido van Rossum <guido@python.org>
parents:
diff changeset
206 list.
344ab348f1e9 Switch to sre for regular expression matching (the new mini-re module
Guido van Rossum <guido@python.org>
parents:
diff changeset
207
344ab348f1e9 Switch to sre for regular expression matching (the new mini-re module
Guido van Rossum <guido@python.org>
parents:
diff changeset
208 """
344ab348f1e9 Switch to sre for regular expression matching (the new mini-re module
Guido van Rossum <guido@python.org>
parents:
diff changeset
209 if type(pattern) == type(''):
344ab348f1e9 Switch to sre for regular expression matching (the new mini-re module
Guido van Rossum <guido@python.org>
parents:
diff changeset
210 pattern = _cachecompile(pattern)
344ab348f1e9 Switch to sre for regular expression matching (the new mini-re module
Guido van Rossum <guido@python.org>
parents:
diff changeset
211 return pattern.split(string, maxsplit)
344ab348f1e9 Switch to sre for regular expression matching (the new mini-re module
Guido van Rossum <guido@python.org>
parents:
diff changeset
212
344ab348f1e9 Switch to sre for regular expression matching (the new mini-re module
Guido van Rossum <guido@python.org>
parents:
diff changeset
213 def findall(pattern, string):
344ab348f1e9 Switch to sre for regular expression matching (the new mini-re module
Guido van Rossum <guido@python.org>
parents:
diff changeset
214 """findall(pattern, string) -> list
15870
010d03853546 Whitespace normalization.
Tim Peters <tim.peters@gmail.com>
parents: 14396
diff changeset
215
13229
344ab348f1e9 Switch to sre for regular expression matching (the new mini-re module
Guido van Rossum <guido@python.org>
parents:
diff changeset
216 Return a list of all non-overlapping matches of pattern in
344ab348f1e9 Switch to sre for regular expression matching (the new mini-re module
Guido van Rossum <guido@python.org>
parents:
diff changeset
217 string. If one or more groups are present in the pattern, return a
344ab348f1e9 Switch to sre for regular expression matching (the new mini-re module
Guido van Rossum <guido@python.org>
parents:
diff changeset
218 list of groups; this will be a list of tuples if the pattern has
344ab348f1e9 Switch to sre for regular expression matching (the new mini-re module
Guido van Rossum <guido@python.org>
parents:
diff changeset
219 more than one group. Empty matches are included in the result.
344ab348f1e9 Switch to sre for regular expression matching (the new mini-re module
Guido van Rossum <guido@python.org>
parents:
diff changeset
220
344ab348f1e9 Switch to sre for regular expression matching (the new mini-re module
Guido van Rossum <guido@python.org>
parents:
diff changeset
221 """
344ab348f1e9 Switch to sre for regular expression matching (the new mini-re module
Guido van Rossum <guido@python.org>
parents:
diff changeset
222 if type(pattern) == type(''):
344ab348f1e9 Switch to sre for regular expression matching (the new mini-re module
Guido van Rossum <guido@python.org>
parents:
diff changeset
223 pattern = _cachecompile(pattern)
344ab348f1e9 Switch to sre for regular expression matching (the new mini-re module
Guido van Rossum <guido@python.org>
parents:
diff changeset
224 return pattern.findall(string)
344ab348f1e9 Switch to sre for regular expression matching (the new mini-re module
Guido van Rossum <guido@python.org>
parents:
diff changeset
225
344ab348f1e9 Switch to sre for regular expression matching (the new mini-re module
Guido van Rossum <guido@python.org>
parents:
diff changeset
226 def escape(pattern):
344ab348f1e9 Switch to sre for regular expression matching (the new mini-re module
Guido van Rossum <guido@python.org>
parents:
diff changeset
227 """escape(string) -> string
15870
010d03853546 Whitespace normalization.
Tim Peters <tim.peters@gmail.com>
parents: 14396
diff changeset
228
13229
344ab348f1e9 Switch to sre for regular expression matching (the new mini-re module
Guido van Rossum <guido@python.org>
parents:
diff changeset
229 Return string with all non-alphanumerics backslashed; this is
344ab348f1e9 Switch to sre for regular expression matching (the new mini-re module
Guido van Rossum <guido@python.org>
parents:
diff changeset
230 useful if you want to match an arbitrary literal string that may
344ab348f1e9 Switch to sre for regular expression matching (the new mini-re module
Guido van Rossum <guido@python.org>
parents:
diff changeset
231 have regular expression metacharacters in it.
344ab348f1e9 Switch to sre for regular expression matching (the new mini-re module
Guido van Rossum <guido@python.org>
parents:
diff changeset
232
344ab348f1e9 Switch to sre for regular expression matching (the new mini-re module
Guido van Rossum <guido@python.org>
parents:
diff changeset
233 """
344ab348f1e9 Switch to sre for regular expression matching (the new mini-re module
Guido van Rossum <guido@python.org>
parents:
diff changeset
234 result = list(pattern)
344ab348f1e9 Switch to sre for regular expression matching (the new mini-re module
Guido van Rossum <guido@python.org>
parents:
diff changeset
235 for i in range(len(pattern)):
344ab348f1e9 Switch to sre for regular expression matching (the new mini-re module
Guido van Rossum <guido@python.org>
parents:
diff changeset
236 char = pattern[i]
16548
da8681f17b50 String method cleanup.
Eric S. Raymond <esr@thyrsus.com>
parents: 16499
diff changeset
237 if not char.isalnum():
13229
344ab348f1e9 Switch to sre for regular expression matching (the new mini-re module
Guido van Rossum <guido@python.org>
parents:
diff changeset
238 if char=='\000': result[i] = '\\000'
344ab348f1e9 Switch to sre for regular expression matching (the new mini-re module
Guido van Rossum <guido@python.org>
parents:
diff changeset
239 else: result[i] = '\\'+char
16499
58de2829cfdd String method conversion.
Eric S. Raymond <esr@thyrsus.com>
parents: 15870
diff changeset
240 return ''.join(result)
13229
344ab348f1e9 Switch to sre for regular expression matching (the new mini-re module
Guido van Rossum <guido@python.org>
parents:
diff changeset
241
344ab348f1e9 Switch to sre for regular expression matching (the new mini-re module
Guido van Rossum <guido@python.org>
parents:
diff changeset
242 def compile(pattern, flags=0):
344ab348f1e9 Switch to sre for regular expression matching (the new mini-re module
Guido van Rossum <guido@python.org>
parents:
diff changeset
243 """compile(pattern[, flags]) -> RegexObject
344ab348f1e9 Switch to sre for regular expression matching (the new mini-re module
Guido van Rossum <guido@python.org>
parents:
diff changeset
244
344ab348f1e9 Switch to sre for regular expression matching (the new mini-re module
Guido van Rossum <guido@python.org>
parents:
diff changeset
245 Compile a regular expression pattern into a regular expression
344ab348f1e9 Switch to sre for regular expression matching (the new mini-re module
Guido van Rossum <guido@python.org>
parents:
diff changeset
246 object, which can be used for matching using its match() and
344ab348f1e9 Switch to sre for regular expression matching (the new mini-re module
Guido van Rossum <guido@python.org>
parents:
diff changeset
247 search() methods.
344ab348f1e9 Switch to sre for regular expression matching (the new mini-re module
Guido van Rossum <guido@python.org>
parents:
diff changeset
248
344ab348f1e9 Switch to sre for regular expression matching (the new mini-re module
Guido van Rossum <guido@python.org>
parents:
diff changeset
249 """
344ab348f1e9 Switch to sre for regular expression matching (the new mini-re module
Guido van Rossum <guido@python.org>
parents:
diff changeset
250 groupindex={}
344ab348f1e9 Switch to sre for regular expression matching (the new mini-re module
Guido van Rossum <guido@python.org>
parents:
diff changeset
251 code=pcre_compile(pattern, flags, groupindex)
344ab348f1e9 Switch to sre for regular expression matching (the new mini-re module
Guido van Rossum <guido@python.org>
parents:
diff changeset
252 return RegexObject(pattern, flags, code, groupindex)
15870
010d03853546 Whitespace normalization.
Tim Peters <tim.peters@gmail.com>
parents: 14396
diff changeset
253
13229
344ab348f1e9 Switch to sre for regular expression matching (the new mini-re module
Guido van Rossum <guido@python.org>
parents:
diff changeset
254
344ab348f1e9 Switch to sre for regular expression matching (the new mini-re module
Guido van Rossum <guido@python.org>
parents:
diff changeset
255 #
344ab348f1e9 Switch to sre for regular expression matching (the new mini-re module
Guido van Rossum <guido@python.org>
parents:
diff changeset
256 # Class definitions
344ab348f1e9 Switch to sre for regular expression matching (the new mini-re module
Guido van Rossum <guido@python.org>
parents:
diff changeset
257 #
344ab348f1e9 Switch to sre for regular expression matching (the new mini-re module
Guido van Rossum <guido@python.org>
parents:
diff changeset
258
344ab348f1e9 Switch to sre for regular expression matching (the new mini-re module
Guido van Rossum <guido@python.org>
parents:
diff changeset
259 class RegexObject:
344ab348f1e9 Switch to sre for regular expression matching (the new mini-re module
Guido van Rossum <guido@python.org>
parents:
diff changeset
260 """Holds a compiled regular expression pattern.
344ab348f1e9 Switch to sre for regular expression matching (the new mini-re module
Guido van Rossum <guido@python.org>
parents:
diff changeset
261
344ab348f1e9 Switch to sre for regular expression matching (the new mini-re module
Guido van Rossum <guido@python.org>
parents:
diff changeset
262 Methods:
344ab348f1e9 Switch to sre for regular expression matching (the new mini-re module
Guido van Rossum <guido@python.org>
parents:
diff changeset
263 match Match the pattern to the beginning of a string.
344ab348f1e9 Switch to sre for regular expression matching (the new mini-re module
Guido van Rossum <guido@python.org>
parents:
diff changeset
264 search Search a string for the presence of the pattern.
344ab348f1e9 Switch to sre for regular expression matching (the new mini-re module
Guido van Rossum <guido@python.org>
parents:
diff changeset
265 sub Substitute occurrences of the pattern found in a string.
344ab348f1e9 Switch to sre for regular expression matching (the new mini-re module
Guido van Rossum <guido@python.org>
parents:
diff changeset
266 subn Same as sub, but also return the number of substitutions made.
344ab348f1e9 Switch to sre for regular expression matching (the new mini-re module
Guido van Rossum <guido@python.org>
parents:
diff changeset
267 split Split a string by the occurrences of the pattern.
344ab348f1e9 Switch to sre for regular expression matching (the new mini-re module
Guido van Rossum <guido@python.org>
parents:
diff changeset
268 findall Find all occurrences of the pattern in a string.
15870
010d03853546 Whitespace normalization.
Tim Peters <tim.peters@gmail.com>
parents: 14396
diff changeset
269
13229
344ab348f1e9 Switch to sre for regular expression matching (the new mini-re module
Guido van Rossum <guido@python.org>
parents:
diff changeset
270 """
344ab348f1e9 Switch to sre for regular expression matching (the new mini-re module
Guido van Rossum <guido@python.org>
parents:
diff changeset
271
344ab348f1e9 Switch to sre for regular expression matching (the new mini-re module
Guido van Rossum <guido@python.org>
parents:
diff changeset
272 def __init__(self, pattern, flags, code, groupindex):
15870
010d03853546 Whitespace normalization.
Tim Peters <tim.peters@gmail.com>
parents: 14396
diff changeset
273 self.code = code
13229
344ab348f1e9 Switch to sre for regular expression matching (the new mini-re module
Guido van Rossum <guido@python.org>
parents:
diff changeset
274 self.flags = flags
344ab348f1e9 Switch to sre for regular expression matching (the new mini-re module
Guido van Rossum <guido@python.org>
parents:
diff changeset
275 self.pattern = pattern
344ab348f1e9 Switch to sre for regular expression matching (the new mini-re module
Guido van Rossum <guido@python.org>
parents:
diff changeset
276 self.groupindex = groupindex
344ab348f1e9 Switch to sre for regular expression matching (the new mini-re module
Guido van Rossum <guido@python.org>
parents:
diff changeset
277
344ab348f1e9 Switch to sre for regular expression matching (the new mini-re module
Guido van Rossum <guido@python.org>
parents:
diff changeset
278 def search(self, string, pos=0, endpos=None):
344ab348f1e9 Switch to sre for regular expression matching (the new mini-re module
Guido van Rossum <guido@python.org>
parents:
diff changeset
279 """search(string[, pos][, endpos]) -> MatchObject or None
15870
010d03853546 Whitespace normalization.
Tim Peters <tim.peters@gmail.com>
parents: 14396
diff changeset
280
13229
344ab348f1e9 Switch to sre for regular expression matching (the new mini-re module
Guido van Rossum <guido@python.org>
parents:
diff changeset
281 Scan through string looking for a location where this regular
344ab348f1e9 Switch to sre for regular expression matching (the new mini-re module
Guido van Rossum <guido@python.org>
parents:
diff changeset
282 expression produces a match, and return a corresponding
344ab348f1e9 Switch to sre for regular expression matching (the new mini-re module
Guido van Rossum <guido@python.org>
parents:
diff changeset
283 MatchObject instance. Return None if no position in the string
344ab348f1e9 Switch to sre for regular expression matching (the new mini-re module
Guido van Rossum <guido@python.org>
parents:
diff changeset
284 matches the pattern; note that this is different from finding
344ab348f1e9 Switch to sre for regular expression matching (the new mini-re module
Guido van Rossum <guido@python.org>
parents:
diff changeset
285 a zero-length match at some point in the string. The optional
344ab348f1e9 Switch to sre for regular expression matching (the new mini-re module
Guido van Rossum <guido@python.org>
parents:
diff changeset
286 pos and endpos parameters have the same meaning as for the
344ab348f1e9 Switch to sre for regular expression matching (the new mini-re module
Guido van Rossum <guido@python.org>
parents:
diff changeset
287 match() method.
15870
010d03853546 Whitespace normalization.
Tim Peters <tim.peters@gmail.com>
parents: 14396
diff changeset
288
13229
344ab348f1e9 Switch to sre for regular expression matching (the new mini-re module
Guido van Rossum <guido@python.org>
parents:
diff changeset
289 """
15870
010d03853546 Whitespace normalization.
Tim Peters <tim.peters@gmail.com>
parents: 14396
diff changeset
290 if endpos is None or endpos>len(string):
13229
344ab348f1e9 Switch to sre for regular expression matching (the new mini-re module
Guido van Rossum <guido@python.org>
parents:
diff changeset
291 endpos=len(string)
344ab348f1e9 Switch to sre for regular expression matching (the new mini-re module
Guido van Rossum <guido@python.org>
parents:
diff changeset
292 if endpos<pos: endpos=pos
344ab348f1e9 Switch to sre for regular expression matching (the new mini-re module
Guido van Rossum <guido@python.org>
parents:
diff changeset
293 regs = self.code.match(string, pos, endpos, 0)
344ab348f1e9 Switch to sre for regular expression matching (the new mini-re module
Guido van Rossum <guido@python.org>
parents:
diff changeset
294 if regs is None:
344ab348f1e9 Switch to sre for regular expression matching (the new mini-re module
Guido van Rossum <guido@python.org>
parents:
diff changeset
295 return None
344ab348f1e9 Switch to sre for regular expression matching (the new mini-re module
Guido van Rossum <guido@python.org>
parents:
diff changeset
296 self._num_regs=len(regs)
15870
010d03853546 Whitespace normalization.
Tim Peters <tim.peters@gmail.com>
parents: 14396
diff changeset
297
13229
344ab348f1e9 Switch to sre for regular expression matching (the new mini-re module
Guido van Rossum <guido@python.org>
parents:
diff changeset
298 return MatchObject(self,
344ab348f1e9 Switch to sre for regular expression matching (the new mini-re module
Guido van Rossum <guido@python.org>
parents:
diff changeset
299 string,
344ab348f1e9 Switch to sre for regular expression matching (the new mini-re module
Guido van Rossum <guido@python.org>
parents:
diff changeset
300 pos, endpos,
344ab348f1e9 Switch to sre for regular expression matching (the new mini-re module
Guido van Rossum <guido@python.org>
parents:
diff changeset
301 regs)
15870
010d03853546 Whitespace normalization.
Tim Peters <tim.peters@gmail.com>
parents: 14396
diff changeset
302
13229
344ab348f1e9 Switch to sre for regular expression matching (the new mini-re module
Guido van Rossum <guido@python.org>
parents:
diff changeset
303 def match(self, string, pos=0, endpos=None):
344ab348f1e9 Switch to sre for regular expression matching (the new mini-re module
Guido van Rossum <guido@python.org>
parents:
diff changeset
304 """match(string[, pos][, endpos]) -> MatchObject or None
15870
010d03853546 Whitespace normalization.
Tim Peters <tim.peters@gmail.com>
parents: 14396
diff changeset
305
13229
344ab348f1e9 Switch to sre for regular expression matching (the new mini-re module
Guido van Rossum <guido@python.org>
parents:
diff changeset
306 If zero or more characters at the beginning of string match
344ab348f1e9 Switch to sre for regular expression matching (the new mini-re module
Guido van Rossum <guido@python.org>
parents:
diff changeset
307 this regular expression, return a corresponding MatchObject
344ab348f1e9 Switch to sre for regular expression matching (the new mini-re module
Guido van Rossum <guido@python.org>
parents:
diff changeset
308 instance. Return None if the string does not match the
344ab348f1e9 Switch to sre for regular expression matching (the new mini-re module
Guido van Rossum <guido@python.org>
parents:
diff changeset
309 pattern; note that this is different from a zero-length match.
344ab348f1e9 Switch to sre for regular expression matching (the new mini-re module
Guido van Rossum <guido@python.org>
parents:
diff changeset
310
344ab348f1e9 Switch to sre for regular expression matching (the new mini-re module
Guido van Rossum <guido@python.org>
parents:
diff changeset
311 Note: If you want to locate a match anywhere in string, use
344ab348f1e9 Switch to sre for regular expression matching (the new mini-re module
Guido van Rossum <guido@python.org>
parents:
diff changeset
312 search() instead.
344ab348f1e9 Switch to sre for regular expression matching (the new mini-re module
Guido van Rossum <guido@python.org>
parents:
diff changeset
313
344ab348f1e9 Switch to sre for regular expression matching (the new mini-re module
Guido van Rossum <guido@python.org>
parents:
diff changeset
314 The optional second parameter pos gives an index in the string
344ab348f1e9 Switch to sre for regular expression matching (the new mini-re module
Guido van Rossum <guido@python.org>
parents:
diff changeset
315 where the search is to start; it defaults to 0. This is not
344ab348f1e9 Switch to sre for regular expression matching (the new mini-re module
Guido van Rossum <guido@python.org>
parents:
diff changeset
316 completely equivalent to slicing the string; the '' pattern
344ab348f1e9 Switch to sre for regular expression matching (the new mini-re module
Guido van Rossum <guido@python.org>
parents:
diff changeset
317 character matches at the real beginning of the string and at
344ab348f1e9 Switch to sre for regular expression matching (the new mini-re module
Guido van Rossum <guido@python.org>
parents:
diff changeset
318 positions just after a newline, but not necessarily at the
344ab348f1e9 Switch to sre for regular expression matching (the new mini-re module
Guido van Rossum <guido@python.org>
parents:
diff changeset
319 index where the search is to start.
344ab348f1e9 Switch to sre for regular expression matching (the new mini-re module
Guido van Rossum <guido@python.org>
parents:
diff changeset
320
344ab348f1e9 Switch to sre for regular expression matching (the new mini-re module
Guido van Rossum <guido@python.org>
parents:
diff changeset
321 The optional parameter endpos limits how far the string will
344ab348f1e9 Switch to sre for regular expression matching (the new mini-re module
Guido van Rossum <guido@python.org>
parents:
diff changeset
322 be searched; it will be as if the string is endpos characters
344ab348f1e9 Switch to sre for regular expression matching (the new mini-re module
Guido van Rossum <guido@python.org>
parents:
diff changeset
323 long, so only the characters from pos to endpos will be
344ab348f1e9 Switch to sre for regular expression matching (the new mini-re module
Guido van Rossum <guido@python.org>
parents:
diff changeset
324 searched for a match.
344ab348f1e9 Switch to sre for regular expression matching (the new mini-re module
Guido van Rossum <guido@python.org>
parents:
diff changeset
325
344ab348f1e9 Switch to sre for regular expression matching (the new mini-re module
Guido van Rossum <guido@python.org>
parents:
diff changeset
326 """
15870
010d03853546 Whitespace normalization.
Tim Peters <tim.peters@gmail.com>
parents: 14396
diff changeset
327 if endpos is None or endpos>len(string):
13229
344ab348f1e9 Switch to sre for regular expression matching (the new mini-re module
Guido van Rossum <guido@python.org>
parents:
diff changeset
328 endpos=len(string)
344ab348f1e9 Switch to sre for regular expression matching (the new mini-re module
Guido van Rossum <guido@python.org>
parents:
diff changeset
329 if endpos<pos: endpos=pos
344ab348f1e9 Switch to sre for regular expression matching (the new mini-re module
Guido van Rossum <guido@python.org>
parents:
diff changeset
330 regs = self.code.match(string, pos, endpos, ANCHORED)
344ab348f1e9 Switch to sre for regular expression matching (the new mini-re module
Guido van Rossum <guido@python.org>
parents:
diff changeset
331 if regs is None:
344ab348f1e9 Switch to sre for regular expression matching (the new mini-re module
Guido van Rossum <guido@python.org>
parents:
diff changeset
332 return None
344ab348f1e9 Switch to sre for regular expression matching (the new mini-re module
Guido van Rossum <guido@python.org>
parents:
diff changeset
333 self._num_regs=len(regs)
344ab348f1e9 Switch to sre for regular expression matching (the new mini-re module
Guido van Rossum <guido@python.org>
parents:
diff changeset
334 return MatchObject(self,
344ab348f1e9 Switch to sre for regular expression matching (the new mini-re module
Guido van Rossum <guido@python.org>
parents:
diff changeset
335 string,
344ab348f1e9 Switch to sre for regular expression matching (the new mini-re module
Guido van Rossum <guido@python.org>
parents:
diff changeset
336 pos, endpos,
344ab348f1e9 Switch to sre for regular expression matching (the new mini-re module
Guido van Rossum <guido@python.org>
parents:
diff changeset
337 regs)
15870
010d03853546 Whitespace normalization.
Tim Peters <tim.peters@gmail.com>
parents: 14396
diff changeset
338
13229
344ab348f1e9 Switch to sre for regular expression matching (the new mini-re module
Guido van Rossum <guido@python.org>
parents:
diff changeset
339 def sub(self, repl, string, count=0):
344ab348f1e9 Switch to sre for regular expression matching (the new mini-re module
Guido van Rossum <guido@python.org>
parents:
diff changeset
340 """sub(repl, string[, count=0]) -> string
15870
010d03853546 Whitespace normalization.
Tim Peters <tim.peters@gmail.com>
parents: 14396
diff changeset
341
13229
344ab348f1e9 Switch to sre for regular expression matching (the new mini-re module
Guido van Rossum <guido@python.org>
parents:
diff changeset
342 Return the string obtained by replacing the leftmost
344ab348f1e9 Switch to sre for regular expression matching (the new mini-re module
Guido van Rossum <guido@python.org>
parents:
diff changeset
343 non-overlapping occurrences of the compiled pattern in string
344ab348f1e9 Switch to sre for regular expression matching (the new mini-re module
Guido van Rossum <guido@python.org>
parents:
diff changeset
344 by the replacement repl. If the pattern isn't found, string is
344ab348f1e9 Switch to sre for regular expression matching (the new mini-re module
Guido van Rossum <guido@python.org>
parents:
diff changeset
345 returned unchanged.
344ab348f1e9 Switch to sre for regular expression matching (the new mini-re module
Guido van Rossum <guido@python.org>
parents:
diff changeset
346
344ab348f1e9 Switch to sre for regular expression matching (the new mini-re module
Guido van Rossum <guido@python.org>
parents:
diff changeset
347 Identical to the sub() function, using the compiled pattern.
15870
010d03853546 Whitespace normalization.
Tim Peters <tim.peters@gmail.com>
parents: 14396
diff changeset
348
13229
344ab348f1e9 Switch to sre for regular expression matching (the new mini-re module
Guido van Rossum <guido@python.org>
parents:
diff changeset
349 """
344ab348f1e9 Switch to sre for regular expression matching (the new mini-re module
Guido van Rossum <guido@python.org>
parents:
diff changeset
350 return self.subn(repl, string, count)[0]
15870
010d03853546 Whitespace normalization.
Tim Peters <tim.peters@gmail.com>
parents: 14396
diff changeset
351
010d03853546 Whitespace normalization.
Tim Peters <tim.peters@gmail.com>
parents: 14396
diff changeset
352 def subn(self, repl, source, count=0):
13229
344ab348f1e9 Switch to sre for regular expression matching (the new mini-re module
Guido van Rossum <guido@python.org>
parents:
diff changeset
353 """subn(repl, string[, count=0]) -> tuple
15870
010d03853546 Whitespace normalization.
Tim Peters <tim.peters@gmail.com>
parents: 14396
diff changeset
354
13229
344ab348f1e9 Switch to sre for regular expression matching (the new mini-re module
Guido van Rossum <guido@python.org>
parents:
diff changeset
355 Perform the same operation as sub(), but return a tuple
344ab348f1e9 Switch to sre for regular expression matching (the new mini-re module
Guido van Rossum <guido@python.org>
parents:
diff changeset
356 (new_string, number_of_subs_made).
344ab348f1e9 Switch to sre for regular expression matching (the new mini-re module
Guido van Rossum <guido@python.org>
parents:
diff changeset
357
344ab348f1e9 Switch to sre for regular expression matching (the new mini-re module
Guido van Rossum <guido@python.org>
parents:
diff changeset
358 """
344ab348f1e9 Switch to sre for regular expression matching (the new mini-re module
Guido van Rossum <guido@python.org>
parents:
diff changeset
359 if count < 0:
344ab348f1e9 Switch to sre for regular expression matching (the new mini-re module
Guido van Rossum <guido@python.org>
parents:
diff changeset
360 raise error, "negative substitution count"
344ab348f1e9 Switch to sre for regular expression matching (the new mini-re module
Guido van Rossum <guido@python.org>
parents:
diff changeset
361 if count == 0:
344ab348f1e9 Switch to sre for regular expression matching (the new mini-re module
Guido van Rossum <guido@python.org>
parents:
diff changeset
362 count = sys.maxint
344ab348f1e9 Switch to sre for regular expression matching (the new mini-re module
Guido van Rossum <guido@python.org>
parents:
diff changeset
363 n = 0 # Number of matches
344ab348f1e9 Switch to sre for regular expression matching (the new mini-re module
Guido van Rossum <guido@python.org>
parents:
diff changeset
364 pos = 0 # Where to start searching
344ab348f1e9 Switch to sre for regular expression matching (the new mini-re module
Guido van Rossum <guido@python.org>
parents:
diff changeset
365 lastmatch = -1 # End of last match
344ab348f1e9 Switch to sre for regular expression matching (the new mini-re module
Guido van Rossum <guido@python.org>
parents:
diff changeset
366 results = [] # Substrings making up the result
344ab348f1e9 Switch to sre for regular expression matching (the new mini-re module
Guido van Rossum <guido@python.org>
parents:
diff changeset
367 end = len(source)
344ab348f1e9 Switch to sre for regular expression matching (the new mini-re module
Guido van Rossum <guido@python.org>
parents:
diff changeset
368
344ab348f1e9 Switch to sre for regular expression matching (the new mini-re module
Guido van Rossum <guido@python.org>
parents:
diff changeset
369 if type(repl) is type(''):
24029
5b508ce049f5 Fix bug #570057: Broken pre.subn() (and pre.sub())
Fredrik Lundh <fredrik@pythonware.com>
parents: 23075
diff changeset
370 # See if repl contains group references (if it does,
5b508ce049f5 Fix bug #570057: Broken pre.subn() (and pre.sub())
Fredrik Lundh <fredrik@pythonware.com>
parents: 23075
diff changeset
371 # pcre_expand will attempt to call _Dummy.group, which
5b508ce049f5 Fix bug #570057: Broken pre.subn() (and pre.sub())
Fredrik Lundh <fredrik@pythonware.com>
parents: 23075
diff changeset
372 # results in a TypeError)
13229
344ab348f1e9 Switch to sre for regular expression matching (the new mini-re module
Guido van Rossum <guido@python.org>
parents:
diff changeset
373 try:
344ab348f1e9 Switch to sre for regular expression matching (the new mini-re module
Guido van Rossum <guido@python.org>
parents:
diff changeset
374 repl = pcre_expand(_Dummy, repl)
24029
5b508ce049f5 Fix bug #570057: Broken pre.subn() (and pre.sub())
Fredrik Lundh <fredrik@pythonware.com>
parents: 23075
diff changeset
375 except (error, TypeError):
13229
344ab348f1e9 Switch to sre for regular expression matching (the new mini-re module
Guido van Rossum <guido@python.org>
parents:
diff changeset
376 m = MatchObject(self, source, 0, end, [])
344ab348f1e9 Switch to sre for regular expression matching (the new mini-re module
Guido van Rossum <guido@python.org>
parents:
diff changeset
377 repl = lambda m, repl=repl, expand=pcre_expand: expand(m, repl)
344ab348f1e9 Switch to sre for regular expression matching (the new mini-re module
Guido van Rossum <guido@python.org>
parents:
diff changeset
378 else:
344ab348f1e9 Switch to sre for regular expression matching (the new mini-re module
Guido van Rossum <guido@python.org>
parents:
diff changeset
379 m = None
344ab348f1e9 Switch to sre for regular expression matching (the new mini-re module
Guido van Rossum <guido@python.org>
parents:
diff changeset
380 else:
344ab348f1e9 Switch to sre for regular expression matching (the new mini-re module
Guido van Rossum <guido@python.org>
parents:
diff changeset
381 m = MatchObject(self, source, 0, end, [])
344ab348f1e9 Switch to sre for regular expression matching (the new mini-re module
Guido van Rossum <guido@python.org>
parents:
diff changeset
382
344ab348f1e9 Switch to sre for regular expression matching (the new mini-re module
Guido van Rossum <guido@python.org>
parents:
diff changeset
383 match = self.code.match
344ab348f1e9 Switch to sre for regular expression matching (the new mini-re module
Guido van Rossum <guido@python.org>
parents:
diff changeset
384 append = results.append
344ab348f1e9 Switch to sre for regular expression matching (the new mini-re module
Guido van Rossum <guido@python.org>
parents:
diff changeset
385 while n < count and pos <= end:
344ab348f1e9 Switch to sre for regular expression matching (the new mini-re module
Guido van Rossum <guido@python.org>
parents:
diff changeset
386 regs = match(source, pos, end, 0)
344ab348f1e9 Switch to sre for regular expression matching (the new mini-re module
Guido van Rossum <guido@python.org>
parents:
diff changeset
387 if not regs:
344ab348f1e9 Switch to sre for regular expression matching (the new mini-re module
Guido van Rossum <guido@python.org>
parents:
diff changeset
388 break
344ab348f1e9 Switch to sre for regular expression matching (the new mini-re module
Guido van Rossum <guido@python.org>
parents:
diff changeset
389 self._num_regs = len(regs)
344ab348f1e9 Switch to sre for regular expression matching (the new mini-re module
Guido van Rossum <guido@python.org>
parents:
diff changeset
390 i, j = regs[0]
344ab348f1e9 Switch to sre for regular expression matching (the new mini-re module
Guido van Rossum <guido@python.org>
parents:
diff changeset
391 if i == j == lastmatch:
344ab348f1e9 Switch to sre for regular expression matching (the new mini-re module
Guido van Rossum <guido@python.org>
parents:
diff changeset
392 # Empty match adjacent to previous match
344ab348f1e9 Switch to sre for regular expression matching (the new mini-re module
Guido van Rossum <guido@python.org>
parents:
diff changeset
393 pos = pos + 1
344ab348f1e9 Switch to sre for regular expression matching (the new mini-re module
Guido van Rossum <guido@python.org>
parents:
diff changeset
394 append(source[lastmatch:pos])
344ab348f1e9 Switch to sre for regular expression matching (the new mini-re module
Guido van Rossum <guido@python.org>
parents:
diff changeset
395 continue
344ab348f1e9 Switch to sre for regular expression matching (the new mini-re module
Guido van Rossum <guido@python.org>
parents:
diff changeset
396 if pos < i:
344ab348f1e9 Switch to sre for regular expression matching (the new mini-re module
Guido van Rossum <guido@python.org>
parents:
diff changeset
397 append(source[pos:i])
344ab348f1e9 Switch to sre for regular expression matching (the new mini-re module
Guido van Rossum <guido@python.org>
parents:
diff changeset
398 if m:
344ab348f1e9 Switch to sre for regular expression matching (the new mini-re module
Guido van Rossum <guido@python.org>
parents:
diff changeset
399 m.pos = pos
344ab348f1e9 Switch to sre for regular expression matching (the new mini-re module
Guido van Rossum <guido@python.org>
parents:
diff changeset
400 m.regs = regs
344ab348f1e9 Switch to sre for regular expression matching (the new mini-re module
Guido van Rossum <guido@python.org>
parents:
diff changeset
401 append(repl(m))
344ab348f1e9 Switch to sre for regular expression matching (the new mini-re module
Guido van Rossum <guido@python.org>
parents:
diff changeset
402 else:
344ab348f1e9 Switch to sre for regular expression matching (the new mini-re module
Guido van Rossum <guido@python.org>
parents:
diff changeset
403 append(repl)
344ab348f1e9 Switch to sre for regular expression matching (the new mini-re module
Guido van Rossum <guido@python.org>
parents:
diff changeset
404 pos = lastmatch = j
344ab348f1e9 Switch to sre for regular expression matching (the new mini-re module
Guido van Rossum <guido@python.org>
parents:
diff changeset
405 if i == j:
344ab348f1e9 Switch to sre for regular expression matching (the new mini-re module
Guido van Rossum <guido@python.org>
parents:
diff changeset
406 # Last match was empty; don't try here again
344ab348f1e9 Switch to sre for regular expression matching (the new mini-re module
Guido van Rossum <guido@python.org>
parents:
diff changeset
407 pos = pos + 1
344ab348f1e9 Switch to sre for regular expression matching (the new mini-re module
Guido van Rossum <guido@python.org>
parents:
diff changeset
408 append(source[lastmatch:pos])
344ab348f1e9 Switch to sre for regular expression matching (the new mini-re module
Guido van Rossum <guido@python.org>
parents:
diff changeset
409 n = n + 1
344ab348f1e9 Switch to sre for regular expression matching (the new mini-re module
Guido van Rossum <guido@python.org>
parents:
diff changeset
410 append(source[pos:])
16499
58de2829cfdd String method conversion.
Eric S. Raymond <esr@thyrsus.com>
parents: 15870
diff changeset
411 return (''.join(results), n)
15870
010d03853546 Whitespace normalization.
Tim Peters <tim.peters@gmail.com>
parents: 14396
diff changeset
412
13229
344ab348f1e9 Switch to sre for regular expression matching (the new mini-re module
Guido van Rossum <guido@python.org>
parents:
diff changeset
413 def split(self, source, maxsplit=0):
344ab348f1e9 Switch to sre for regular expression matching (the new mini-re module
Guido van Rossum <guido@python.org>
parents:
diff changeset
414 """split(source[, maxsplit=0]) -> list of strings
15870
010d03853546 Whitespace normalization.
Tim Peters <tim.peters@gmail.com>
parents: 14396
diff changeset
415
13229
344ab348f1e9 Switch to sre for regular expression matching (the new mini-re module
Guido van Rossum <guido@python.org>
parents:
diff changeset
416 Split string by the occurrences of the compiled pattern. If
344ab348f1e9 Switch to sre for regular expression matching (the new mini-re module
Guido van Rossum <guido@python.org>
parents:
diff changeset
417 capturing parentheses are used in the pattern, then the text
344ab348f1e9 Switch to sre for regular expression matching (the new mini-re module
Guido van Rossum <guido@python.org>
parents:
diff changeset
418 of all groups in the pattern are also returned as part of the
344ab348f1e9 Switch to sre for regular expression matching (the new mini-re module
Guido van Rossum <guido@python.org>
parents:
diff changeset
419 resulting list. If maxsplit is nonzero, at most maxsplit
344ab348f1e9 Switch to sre for regular expression matching (the new mini-re module
Guido van Rossum <guido@python.org>
parents:
diff changeset
420 splits occur, and the remainder of the string is returned as
344ab348f1e9 Switch to sre for regular expression matching (the new mini-re module
Guido van Rossum <guido@python.org>
parents:
diff changeset
421 the final element of the list.
15870
010d03853546 Whitespace normalization.
Tim Peters <tim.peters@gmail.com>
parents: 14396
diff changeset
422
13229
344ab348f1e9 Switch to sre for regular expression matching (the new mini-re module
Guido van Rossum <guido@python.org>
parents:
diff changeset
423 """
344ab348f1e9 Switch to sre for regular expression matching (the new mini-re module
Guido van Rossum <guido@python.org>
parents:
diff changeset
424 if maxsplit < 0:
344ab348f1e9 Switch to sre for regular expression matching (the new mini-re module
Guido van Rossum <guido@python.org>
parents:
diff changeset
425 raise error, "negative split count"
344ab348f1e9 Switch to sre for regular expression matching (the new mini-re module
Guido van Rossum <guido@python.org>
parents:
diff changeset
426 if maxsplit == 0:
344ab348f1e9 Switch to sre for regular expression matching (the new mini-re module
Guido van Rossum <guido@python.org>
parents:
diff changeset
427 maxsplit = sys.maxint
344ab348f1e9 Switch to sre for regular expression matching (the new mini-re module
Guido van Rossum <guido@python.org>
parents:
diff changeset
428 n = 0
344ab348f1e9 Switch to sre for regular expression matching (the new mini-re module
Guido van Rossum <guido@python.org>
parents:
diff changeset
429 pos = 0
344ab348f1e9 Switch to sre for regular expression matching (the new mini-re module
Guido van Rossum <guido@python.org>
parents:
diff changeset
430 lastmatch = 0
344ab348f1e9 Switch to sre for regular expression matching (the new mini-re module
Guido van Rossum <guido@python.org>
parents:
diff changeset
431 results = []
344ab348f1e9 Switch to sre for regular expression matching (the new mini-re module
Guido van Rossum <guido@python.org>
parents:
diff changeset
432 end = len(source)
344ab348f1e9 Switch to sre for regular expression matching (the new mini-re module
Guido van Rossum <guido@python.org>
parents:
diff changeset
433 match = self.code.match
344ab348f1e9 Switch to sre for regular expression matching (the new mini-re module
Guido van Rossum <guido@python.org>
parents:
diff changeset
434 append = results.append
344ab348f1e9 Switch to sre for regular expression matching (the new mini-re module
Guido van Rossum <guido@python.org>
parents:
diff changeset
435 while n < maxsplit:
344ab348f1e9 Switch to sre for regular expression matching (the new mini-re module
Guido van Rossum <guido@python.org>
parents:
diff changeset
436 regs = match(source, pos, end, 0)
344ab348f1e9 Switch to sre for regular expression matching (the new mini-re module
Guido van Rossum <guido@python.org>
parents:
diff changeset
437 if not regs:
344ab348f1e9 Switch to sre for regular expression matching (the new mini-re module
Guido van Rossum <guido@python.org>
parents:
diff changeset
438 break
344ab348f1e9 Switch to sre for regular expression matching (the new mini-re module
Guido van Rossum <guido@python.org>
parents:
diff changeset
439 i, j = regs[0]
344ab348f1e9 Switch to sre for regular expression matching (the new mini-re module
Guido van Rossum <guido@python.org>
parents:
diff changeset
440 if i == j:
344ab348f1e9 Switch to sre for regular expression matching (the new mini-re module
Guido van Rossum <guido@python.org>
parents:
diff changeset
441 # Empty match
344ab348f1e9 Switch to sre for regular expression matching (the new mini-re module
Guido van Rossum <guido@python.org>
parents:
diff changeset
442 if pos >= end:
344ab348f1e9 Switch to sre for regular expression matching (the new mini-re module
Guido van Rossum <guido@python.org>
parents:
diff changeset
443 break
344ab348f1e9 Switch to sre for regular expression matching (the new mini-re module
Guido van Rossum <guido@python.org>
parents:
diff changeset
444 pos = pos+1
344ab348f1e9 Switch to sre for regular expression matching (the new mini-re module
Guido van Rossum <guido@python.org>
parents:
diff changeset
445 continue
344ab348f1e9 Switch to sre for regular expression matching (the new mini-re module
Guido van Rossum <guido@python.org>
parents:
diff changeset
446 append(source[lastmatch:i])
344ab348f1e9 Switch to sre for regular expression matching (the new mini-re module
Guido van Rossum <guido@python.org>
parents:
diff changeset
447 rest = regs[1:]
344ab348f1e9 Switch to sre for regular expression matching (the new mini-re module
Guido van Rossum <guido@python.org>
parents:
diff changeset
448 if rest:
344ab348f1e9 Switch to sre for regular expression matching (the new mini-re module
Guido van Rossum <guido@python.org>
parents:
diff changeset
449 for a, b in rest:
344ab348f1e9 Switch to sre for regular expression matching (the new mini-re module
Guido van Rossum <guido@python.org>
parents:
diff changeset
450 if a == -1 or b == -1:
344ab348f1e9 Switch to sre for regular expression matching (the new mini-re module
Guido van Rossum <guido@python.org>
parents:
diff changeset
451 group = None
344ab348f1e9 Switch to sre for regular expression matching (the new mini-re module
Guido van Rossum <guido@python.org>
parents:
diff changeset
452 else:
344ab348f1e9 Switch to sre for regular expression matching (the new mini-re module
Guido van Rossum <guido@python.org>
parents:
diff changeset
453 group = source[a:b]
344ab348f1e9 Switch to sre for regular expression matching (the new mini-re module
Guido van Rossum <guido@python.org>
parents:
diff changeset
454 append(group)
344ab348f1e9 Switch to sre for regular expression matching (the new mini-re module
Guido van Rossum <guido@python.org>
parents:
diff changeset
455 pos = lastmatch = j
344ab348f1e9 Switch to sre for regular expression matching (the new mini-re module
Guido van Rossum <guido@python.org>
parents:
diff changeset
456 n = n + 1
344ab348f1e9 Switch to sre for regular expression matching (the new mini-re module
Guido van Rossum <guido@python.org>
parents:
diff changeset
457 append(source[lastmatch:])
344ab348f1e9 Switch to sre for regular expression matching (the new mini-re module
Guido van Rossum <guido@python.org>
parents:
diff changeset
458 return results
344ab348f1e9 Switch to sre for regular expression matching (the new mini-re module
Guido van Rossum <guido@python.org>
parents:
diff changeset
459
344ab348f1e9 Switch to sre for regular expression matching (the new mini-re module
Guido van Rossum <guido@python.org>
parents:
diff changeset
460 def findall(self, source):
344ab348f1e9 Switch to sre for regular expression matching (the new mini-re module
Guido van Rossum <guido@python.org>
parents:
diff changeset
461 """findall(source) -> list
15870
010d03853546 Whitespace normalization.
Tim Peters <tim.peters@gmail.com>
parents: 14396
diff changeset
462
13229
344ab348f1e9 Switch to sre for regular expression matching (the new mini-re module
Guido van Rossum <guido@python.org>
parents:
diff changeset
463 Return a list of all non-overlapping matches of the compiled
344ab348f1e9 Switch to sre for regular expression matching (the new mini-re module
Guido van Rossum <guido@python.org>
parents:
diff changeset
464 pattern in string. If one or more groups are present in the
344ab348f1e9 Switch to sre for regular expression matching (the new mini-re module
Guido van Rossum <guido@python.org>
parents:
diff changeset
465 pattern, return a list of groups; this will be a list of
344ab348f1e9 Switch to sre for regular expression matching (the new mini-re module
Guido van Rossum <guido@python.org>
parents:
diff changeset
466 tuples if the pattern has more than one group. Empty matches
344ab348f1e9 Switch to sre for regular expression matching (the new mini-re module
Guido van Rossum <guido@python.org>
parents:
diff changeset
467 are included in the result.
344ab348f1e9 Switch to sre for regular expression matching (the new mini-re module
Guido van Rossum <guido@python.org>
parents:
diff changeset
468
344ab348f1e9 Switch to sre for regular expression matching (the new mini-re module
Guido van Rossum <guido@python.org>
parents:
diff changeset
469 """
344ab348f1e9 Switch to sre for regular expression matching (the new mini-re module
Guido van Rossum <guido@python.org>
parents:
diff changeset
470 pos = 0
344ab348f1e9 Switch to sre for regular expression matching (the new mini-re module
Guido van Rossum <guido@python.org>
parents:
diff changeset
471 end = len(source)
344ab348f1e9 Switch to sre for regular expression matching (the new mini-re module
Guido van Rossum <guido@python.org>
parents:
diff changeset
472 results = []
344ab348f1e9 Switch to sre for regular expression matching (the new mini-re module
Guido van Rossum <guido@python.org>
parents:
diff changeset
473 match = self.code.match
344ab348f1e9 Switch to sre for regular expression matching (the new mini-re module
Guido van Rossum <guido@python.org>
parents:
diff changeset
474 append = results.append
344ab348f1e9 Switch to sre for regular expression matching (the new mini-re module
Guido van Rossum <guido@python.org>
parents:
diff changeset
475 while pos <= end:
344ab348f1e9 Switch to sre for regular expression matching (the new mini-re module
Guido van Rossum <guido@python.org>
parents:
diff changeset
476 regs = match(source, pos, end, 0)
344ab348f1e9 Switch to sre for regular expression matching (the new mini-re module
Guido van Rossum <guido@python.org>
parents:
diff changeset
477 if not regs:
344ab348f1e9 Switch to sre for regular expression matching (the new mini-re module
Guido van Rossum <guido@python.org>
parents:
diff changeset
478 break
344ab348f1e9 Switch to sre for regular expression matching (the new mini-re module
Guido van Rossum <guido@python.org>
parents:
diff changeset
479 i, j = regs[0]
344ab348f1e9 Switch to sre for regular expression matching (the new mini-re module
Guido van Rossum <guido@python.org>
parents:
diff changeset
480 rest = regs[1:]
344ab348f1e9 Switch to sre for regular expression matching (the new mini-re module
Guido van Rossum <guido@python.org>
parents:
diff changeset
481 if not rest:
344ab348f1e9 Switch to sre for regular expression matching (the new mini-re module
Guido van Rossum <guido@python.org>
parents:
diff changeset
482 gr = source[i:j]
344ab348f1e9 Switch to sre for regular expression matching (the new mini-re module
Guido van Rossum <guido@python.org>
parents:
diff changeset
483 elif len(rest) == 1:
344ab348f1e9 Switch to sre for regular expression matching (the new mini-re module
Guido van Rossum <guido@python.org>
parents:
diff changeset
484 a, b = rest[0]
344ab348f1e9 Switch to sre for regular expression matching (the new mini-re module
Guido van Rossum <guido@python.org>
parents:
diff changeset
485 gr = source[a:b]
344ab348f1e9 Switch to sre for regular expression matching (the new mini-re module
Guido van Rossum <guido@python.org>
parents:
diff changeset
486 else:
344ab348f1e9 Switch to sre for regular expression matching (the new mini-re module
Guido van Rossum <guido@python.org>
parents:
diff changeset
487 gr = []
344ab348f1e9 Switch to sre for regular expression matching (the new mini-re module
Guido van Rossum <guido@python.org>
parents:
diff changeset
488 for (a, b) in rest:
344ab348f1e9 Switch to sre for regular expression matching (the new mini-re module
Guido van Rossum <guido@python.org>
parents:
diff changeset
489 gr.append(source[a:b])
344ab348f1e9 Switch to sre for regular expression matching (the new mini-re module
Guido van Rossum <guido@python.org>
parents:
diff changeset
490 gr = tuple(gr)
344ab348f1e9 Switch to sre for regular expression matching (the new mini-re module
Guido van Rossum <guido@python.org>
parents:
diff changeset
491 append(gr)
344ab348f1e9 Switch to sre for regular expression matching (the new mini-re module
Guido van Rossum <guido@python.org>
parents:
diff changeset
492 pos = max(j, pos+1)
344ab348f1e9 Switch to sre for regular expression matching (the new mini-re module
Guido van Rossum <guido@python.org>
parents:
diff changeset
493 return results
344ab348f1e9 Switch to sre for regular expression matching (the new mini-re module
Guido van Rossum <guido@python.org>
parents:
diff changeset
494
344ab348f1e9 Switch to sre for regular expression matching (the new mini-re module
Guido van Rossum <guido@python.org>
parents:
diff changeset
495 # The following 3 functions were contributed by Mike Fletcher, and
344ab348f1e9 Switch to sre for regular expression matching (the new mini-re module
Guido van Rossum <guido@python.org>
parents:
diff changeset
496 # allow pickling and unpickling of RegexObject instances.
344ab348f1e9 Switch to sre for regular expression matching (the new mini-re module
Guido van Rossum <guido@python.org>
parents:
diff changeset
497 def __getinitargs__(self):
344ab348f1e9 Switch to sre for regular expression matching (the new mini-re module
Guido van Rossum <guido@python.org>
parents:
diff changeset
498 return (None,None,None,None) # any 4 elements, to work around
344ab348f1e9 Switch to sre for regular expression matching (the new mini-re module
Guido van Rossum <guido@python.org>
parents:
diff changeset
499 # problems with the
15870
010d03853546 Whitespace normalization.
Tim Peters <tim.peters@gmail.com>
parents: 14396
diff changeset
500 # pickle/cPickle modules not yet
13229
344ab348f1e9 Switch to sre for regular expression matching (the new mini-re module
Guido van Rossum <guido@python.org>
parents:
diff changeset
501 # ignoring the __init__ function
344ab348f1e9 Switch to sre for regular expression matching (the new mini-re module
Guido van Rossum <guido@python.org>
parents:
diff changeset
502 def __getstate__(self):
344ab348f1e9 Switch to sre for regular expression matching (the new mini-re module
Guido van Rossum <guido@python.org>
parents:
diff changeset
503 return self.pattern, self.flags, self.groupindex
344ab348f1e9 Switch to sre for regular expression matching (the new mini-re module
Guido van Rossum <guido@python.org>
parents:
diff changeset
504 def __setstate__(self, statetuple):
344ab348f1e9 Switch to sre for regular expression matching (the new mini-re module
Guido van Rossum <guido@python.org>
parents:
diff changeset
505 self.pattern = statetuple[0]
344ab348f1e9 Switch to sre for regular expression matching (the new mini-re module
Guido van Rossum <guido@python.org>
parents:
diff changeset
506 self.flags = statetuple[1]
344ab348f1e9 Switch to sre for regular expression matching (the new mini-re module
Guido van Rossum <guido@python.org>
parents:
diff changeset
507 self.groupindex = statetuple[2]
344ab348f1e9 Switch to sre for regular expression matching (the new mini-re module
Guido van Rossum <guido@python.org>
parents:
diff changeset
508 self.code = apply(pcre_compile, statetuple)
344ab348f1e9 Switch to sre for regular expression matching (the new mini-re module
Guido van Rossum <guido@python.org>
parents:
diff changeset
509
344ab348f1e9 Switch to sre for regular expression matching (the new mini-re module
Guido van Rossum <guido@python.org>
parents:
diff changeset
510 class _Dummy:
344ab348f1e9 Switch to sre for regular expression matching (the new mini-re module
Guido van Rossum <guido@python.org>
parents:
diff changeset
511 # Dummy class used by _subn_string(). Has 'group' to avoid core dump.
344ab348f1e9 Switch to sre for regular expression matching (the new mini-re module
Guido van Rossum <guido@python.org>
parents:
diff changeset
512 group = None
344ab348f1e9 Switch to sre for regular expression matching (the new mini-re module
Guido van Rossum <guido@python.org>
parents:
diff changeset
513
344ab348f1e9 Switch to sre for regular expression matching (the new mini-re module
Guido van Rossum <guido@python.org>
parents:
diff changeset
514 class MatchObject:
344ab348f1e9 Switch to sre for regular expression matching (the new mini-re module
Guido van Rossum <guido@python.org>
parents:
diff changeset
515 """Holds a compiled regular expression pattern.
344ab348f1e9 Switch to sre for regular expression matching (the new mini-re module
Guido van Rossum <guido@python.org>
parents:
diff changeset
516
344ab348f1e9 Switch to sre for regular expression matching (the new mini-re module
Guido van Rossum <guido@python.org>
parents:
diff changeset
517 Methods:
344ab348f1e9 Switch to sre for regular expression matching (the new mini-re module
Guido van Rossum <guido@python.org>
parents:
diff changeset
518 start Return the index of the start of a matched substring.
344ab348f1e9 Switch to sre for regular expression matching (the new mini-re module
Guido van Rossum <guido@python.org>
parents:
diff changeset
519 end Return the index of the end of a matched substring.
344ab348f1e9 Switch to sre for regular expression matching (the new mini-re module
Guido van Rossum <guido@python.org>
parents:
diff changeset
520 span Return a tuple of (start, end) of a matched substring.
344ab348f1e9 Switch to sre for regular expression matching (the new mini-re module
Guido van Rossum <guido@python.org>
parents:
diff changeset
521 groups Return a tuple of all the subgroups of the match.
344ab348f1e9 Switch to sre for regular expression matching (the new mini-re module
Guido van Rossum <guido@python.org>
parents:
diff changeset
522 group Return one or more subgroups of the match.
344ab348f1e9 Switch to sre for regular expression matching (the new mini-re module
Guido van Rossum <guido@python.org>
parents:
diff changeset
523 groupdict Return a dictionary of all the named subgroups of the match.
344ab348f1e9 Switch to sre for regular expression matching (the new mini-re module
Guido van Rossum <guido@python.org>
parents:
diff changeset
524
344ab348f1e9 Switch to sre for regular expression matching (the new mini-re module
Guido van Rossum <guido@python.org>
parents:
diff changeset
525 """
344ab348f1e9 Switch to sre for regular expression matching (the new mini-re module
Guido van Rossum <guido@python.org>
parents:
diff changeset
526
344ab348f1e9 Switch to sre for regular expression matching (the new mini-re module
Guido van Rossum <guido@python.org>
parents:
diff changeset
527 def __init__(self, re, string, pos, endpos, regs):
344ab348f1e9 Switch to sre for regular expression matching (the new mini-re module
Guido van Rossum <guido@python.org>
parents:
diff changeset
528 self.re = re
344ab348f1e9 Switch to sre for regular expression matching (the new mini-re module
Guido van Rossum <guido@python.org>
parents:
diff changeset
529 self.string = string
15870
010d03853546 Whitespace normalization.
Tim Peters <tim.peters@gmail.com>
parents: 14396
diff changeset
530 self.pos = pos
13229
344ab348f1e9 Switch to sre for regular expression matching (the new mini-re module
Guido van Rossum <guido@python.org>
parents:
diff changeset
531 self.endpos = endpos
344ab348f1e9 Switch to sre for regular expression matching (the new mini-re module
Guido van Rossum <guido@python.org>
parents:
diff changeset
532 self.regs = regs
15870
010d03853546 Whitespace normalization.
Tim Peters <tim.peters@gmail.com>
parents: 14396
diff changeset
533
13229
344ab348f1e9 Switch to sre for regular expression matching (the new mini-re module
Guido van Rossum <guido@python.org>
parents:
diff changeset
534 def start(self, g = 0):
344ab348f1e9 Switch to sre for regular expression matching (the new mini-re module
Guido van Rossum <guido@python.org>
parents:
diff changeset
535 """start([group=0]) -> int or None
15870
010d03853546 Whitespace normalization.
Tim Peters <tim.peters@gmail.com>
parents: 14396
diff changeset
536
13229
344ab348f1e9 Switch to sre for regular expression matching (the new mini-re module
Guido van Rossum <guido@python.org>
parents:
diff changeset
537 Return the index of the start of the substring matched by
344ab348f1e9 Switch to sre for regular expression matching (the new mini-re module
Guido van Rossum <guido@python.org>
parents:
diff changeset
538 group; group defaults to zero (meaning the whole matched
14396
a10afb3ad275 Correct docstring about return value when group didn't participate in match
Andrew M. Kuchling <amk@amk.ca>
parents: 13620
diff changeset
539 substring). Return -1 if group exists but did not contribute
13229
344ab348f1e9 Switch to sre for regular expression matching (the new mini-re module
Guido van Rossum <guido@python.org>
parents:
diff changeset
540 to the match.
344ab348f1e9 Switch to sre for regular expression matching (the new mini-re module
Guido van Rossum <guido@python.org>
parents:
diff changeset
541
344ab348f1e9 Switch to sre for regular expression matching (the new mini-re module
Guido van Rossum <guido@python.org>
parents:
diff changeset
542 """
344ab348f1e9 Switch to sre for regular expression matching (the new mini-re module
Guido van Rossum <guido@python.org>
parents:
diff changeset
543 if type(g) == type(''):
344ab348f1e9 Switch to sre for regular expression matching (the new mini-re module
Guido van Rossum <guido@python.org>
parents:
diff changeset
544 try:
344ab348f1e9 Switch to sre for regular expression matching (the new mini-re module
Guido van Rossum <guido@python.org>
parents:
diff changeset
545 g = self.re.groupindex[g]
344ab348f1e9 Switch to sre for regular expression matching (the new mini-re module
Guido van Rossum <guido@python.org>
parents:
diff changeset
546 except (KeyError, TypeError):
344ab348f1e9 Switch to sre for regular expression matching (the new mini-re module
Guido van Rossum <guido@python.org>
parents:
diff changeset
547 raise IndexError, 'group %s is undefined' % `g`
344ab348f1e9 Switch to sre for regular expression matching (the new mini-re module
Guido van Rossum <guido@python.org>
parents:
diff changeset
548 return self.regs[g][0]
15870
010d03853546 Whitespace normalization.
Tim Peters <tim.peters@gmail.com>
parents: 14396
diff changeset
549
13229
344ab348f1e9 Switch to sre for regular expression matching (the new mini-re module
Guido van Rossum <guido@python.org>
parents:
diff changeset
550 def end(self, g = 0):
344ab348f1e9 Switch to sre for regular expression matching (the new mini-re module
Guido van Rossum <guido@python.org>
parents:
diff changeset
551 """end([group=0]) -> int or None
15870
010d03853546 Whitespace normalization.
Tim Peters <tim.peters@gmail.com>
parents: 14396
diff changeset
552
13229
344ab348f1e9 Switch to sre for regular expression matching (the new mini-re module
Guido van Rossum <guido@python.org>
parents:
diff changeset
553 Return the indices of the end of the substring matched by
344ab348f1e9 Switch to sre for regular expression matching (the new mini-re module
Guido van Rossum <guido@python.org>
parents:
diff changeset
554 group; group defaults to zero (meaning the whole matched
14396
a10afb3ad275 Correct docstring about return value when group didn't participate in match
Andrew M. Kuchling <amk@amk.ca>
parents: 13620
diff changeset
555 substring). Return -1 if group exists but did not contribute
13229
344ab348f1e9 Switch to sre for regular expression matching (the new mini-re module
Guido van Rossum <guido@python.org>
parents:
diff changeset
556 to the match.
344ab348f1e9 Switch to sre for regular expression matching (the new mini-re module
Guido van Rossum <guido@python.org>
parents:
diff changeset
557
344ab348f1e9 Switch to sre for regular expression matching (the new mini-re module
Guido van Rossum <guido@python.org>
parents:
diff changeset
558 """
344ab348f1e9 Switch to sre for regular expression matching (the new mini-re module
Guido van Rossum <guido@python.org>
parents:
diff changeset
559 if type(g) == type(''):
344ab348f1e9 Switch to sre for regular expression matching (the new mini-re module
Guido van Rossum <guido@python.org>
parents:
diff changeset
560 try:
344ab348f1e9 Switch to sre for regular expression matching (the new mini-re module
Guido van Rossum <guido@python.org>
parents:
diff changeset
561 g = self.re.groupindex[g]
344ab348f1e9 Switch to sre for regular expression matching (the new mini-re module
Guido van Rossum <guido@python.org>
parents:
diff changeset
562 except (KeyError, TypeError):
344ab348f1e9 Switch to sre for regular expression matching (the new mini-re module
Guido van Rossum <guido@python.org>
parents:
diff changeset
563 raise IndexError, 'group %s is undefined' % `g`
344ab348f1e9 Switch to sre for regular expression matching (the new mini-re module
Guido van Rossum <guido@python.org>
parents:
diff changeset
564 return self.regs[g][1]
15870
010d03853546 Whitespace normalization.
Tim Peters <tim.peters@gmail.com>
parents: 14396
diff changeset
565
13229
344ab348f1e9 Switch to sre for regular expression matching (the new mini-re module
Guido van Rossum <guido@python.org>
parents:
diff changeset
566 def span(self, g = 0):
344ab348f1e9 Switch to sre for regular expression matching (the new mini-re module
Guido van Rossum <guido@python.org>
parents:
diff changeset
567 """span([group=0]) -> tuple
15870
010d03853546 Whitespace normalization.
Tim Peters <tim.peters@gmail.com>
parents: 14396
diff changeset
568
13229
344ab348f1e9 Switch to sre for regular expression matching (the new mini-re module
Guido van Rossum <guido@python.org>
parents:
diff changeset
569 Return the 2-tuple (m.start(group), m.end(group)). Note that
14396
a10afb3ad275 Correct docstring about return value when group didn't participate in match
Andrew M. Kuchling <amk@amk.ca>
parents: 13620
diff changeset
570 if group did not contribute to the match, this is (-1,
a10afb3ad275 Correct docstring about return value when group didn't participate in match
Andrew M. Kuchling <amk@amk.ca>
parents: 13620
diff changeset
571 -1). Group defaults to zero (meaning the whole matched
13229
344ab348f1e9 Switch to sre for regular expression matching (the new mini-re module
Guido van Rossum <guido@python.org>
parents:
diff changeset
572 substring).
344ab348f1e9 Switch to sre for regular expression matching (the new mini-re module
Guido van Rossum <guido@python.org>
parents:
diff changeset
573
344ab348f1e9 Switch to sre for regular expression matching (the new mini-re module
Guido van Rossum <guido@python.org>
parents:
diff changeset
574 """
344ab348f1e9 Switch to sre for regular expression matching (the new mini-re module
Guido van Rossum <guido@python.org>
parents:
diff changeset
575 if type(g) == type(''):
344ab348f1e9 Switch to sre for regular expression matching (the new mini-re module
Guido van Rossum <guido@python.org>
parents:
diff changeset
576 try:
344ab348f1e9 Switch to sre for regular expression matching (the new mini-re module
Guido van Rossum <guido@python.org>
parents:
diff changeset
577 g = self.re.groupindex[g]
344ab348f1e9 Switch to sre for regular expression matching (the new mini-re module
Guido van Rossum <guido@python.org>
parents:
diff changeset
578 except (KeyError, TypeError):
344ab348f1e9 Switch to sre for regular expression matching (the new mini-re module
Guido van Rossum <guido@python.org>
parents:
diff changeset
579 raise IndexError, 'group %s is undefined' % `g`
344ab348f1e9 Switch to sre for regular expression matching (the new mini-re module
Guido van Rossum <guido@python.org>
parents:
diff changeset
580 return self.regs[g]
15870
010d03853546 Whitespace normalization.
Tim Peters <tim.peters@gmail.com>
parents: 14396
diff changeset
581
13229
344ab348f1e9 Switch to sre for regular expression matching (the new mini-re module
Guido van Rossum <guido@python.org>
parents:
diff changeset
582 def groups(self, default=None):
344ab348f1e9 Switch to sre for regular expression matching (the new mini-re module
Guido van Rossum <guido@python.org>
parents:
diff changeset
583 """groups([default=None]) -> tuple
15870
010d03853546 Whitespace normalization.
Tim Peters <tim.peters@gmail.com>
parents: 14396
diff changeset
584
13229
344ab348f1e9 Switch to sre for regular expression matching (the new mini-re module
Guido van Rossum <guido@python.org>
parents:
diff changeset
585 Return a tuple containing all the subgroups of the match, from
344ab348f1e9 Switch to sre for regular expression matching (the new mini-re module
Guido van Rossum <guido@python.org>
parents:
diff changeset
586 1 up to however many groups are in the pattern. The default
344ab348f1e9 Switch to sre for regular expression matching (the new mini-re module
Guido van Rossum <guido@python.org>
parents:
diff changeset
587 argument is used for groups that did not participate in the
344ab348f1e9 Switch to sre for regular expression matching (the new mini-re module
Guido van Rossum <guido@python.org>
parents:
diff changeset
588 match.
344ab348f1e9 Switch to sre for regular expression matching (the new mini-re module
Guido van Rossum <guido@python.org>
parents:
diff changeset
589
344ab348f1e9 Switch to sre for regular expression matching (the new mini-re module
Guido van Rossum <guido@python.org>
parents:
diff changeset
590 """
344ab348f1e9 Switch to sre for regular expression matching (the new mini-re module
Guido van Rossum <guido@python.org>
parents:
diff changeset
591 result = []
344ab348f1e9 Switch to sre for regular expression matching (the new mini-re module
Guido van Rossum <guido@python.org>
parents:
diff changeset
592 for g in range(1, self.re._num_regs):
344ab348f1e9 Switch to sre for regular expression matching (the new mini-re module
Guido van Rossum <guido@python.org>
parents:
diff changeset
593 a, b = self.regs[g]
344ab348f1e9 Switch to sre for regular expression matching (the new mini-re module
Guido van Rossum <guido@python.org>
parents:
diff changeset
594 if a == -1 or b == -1:
344ab348f1e9 Switch to sre for regular expression matching (the new mini-re module
Guido van Rossum <guido@python.org>
parents:
diff changeset
595 result.append(default)
344ab348f1e9 Switch to sre for regular expression matching (the new mini-re module
Guido van Rossum <guido@python.org>
parents:
diff changeset
596 else:
344ab348f1e9 Switch to sre for regular expression matching (the new mini-re module
Guido van Rossum <guido@python.org>
parents:
diff changeset
597 result.append(self.string[a:b])
344ab348f1e9 Switch to sre for regular expression matching (the new mini-re module
Guido van Rossum <guido@python.org>
parents:
diff changeset
598 return tuple(result)
344ab348f1e9 Switch to sre for regular expression matching (the new mini-re module
Guido van Rossum <guido@python.org>
parents:
diff changeset
599
344ab348f1e9 Switch to sre for regular expression matching (the new mini-re module
Guido van Rossum <guido@python.org>
parents:
diff changeset
600 def group(self, *groups):
344ab348f1e9 Switch to sre for regular expression matching (the new mini-re module
Guido van Rossum <guido@python.org>
parents:
diff changeset
601 """group([group1, group2, ...]) -> string or tuple
15870
010d03853546 Whitespace normalization.
Tim Peters <tim.peters@gmail.com>
parents: 14396
diff changeset
602
13229
344ab348f1e9 Switch to sre for regular expression matching (the new mini-re module
Guido van Rossum <guido@python.org>
parents:
diff changeset
603 Return one or more subgroups of the match. If there is a
344ab348f1e9 Switch to sre for regular expression matching (the new mini-re module
Guido van Rossum <guido@python.org>
parents:
diff changeset
604 single argument, the result is a single string; if there are
344ab348f1e9 Switch to sre for regular expression matching (the new mini-re module
Guido van Rossum <guido@python.org>
parents:
diff changeset
605 multiple arguments, the result is a tuple with one item per
344ab348f1e9 Switch to sre for regular expression matching (the new mini-re module
Guido van Rossum <guido@python.org>
parents:
diff changeset
606 argument. Without arguments, group1 defaults to zero (i.e. the
344ab348f1e9 Switch to sre for regular expression matching (the new mini-re module
Guido van Rossum <guido@python.org>
parents:
diff changeset
607 whole match is returned). If a groupN argument is zero, the
344ab348f1e9 Switch to sre for regular expression matching (the new mini-re module
Guido van Rossum <guido@python.org>
parents:
diff changeset
608 corresponding return value is the entire matching string; if
344ab348f1e9 Switch to sre for regular expression matching (the new mini-re module
Guido van Rossum <guido@python.org>
parents:
diff changeset
609 it is in the inclusive range [1..99], it is the string
344ab348f1e9 Switch to sre for regular expression matching (the new mini-re module
Guido van Rossum <guido@python.org>
parents:
diff changeset
610 matching the the corresponding parenthesized group. If a group
344ab348f1e9 Switch to sre for regular expression matching (the new mini-re module
Guido van Rossum <guido@python.org>
parents:
diff changeset
611 number is negative or larger than the number of groups defined
344ab348f1e9 Switch to sre for regular expression matching (the new mini-re module
Guido van Rossum <guido@python.org>
parents:
diff changeset
612 in the pattern, an IndexError exception is raised. If a group
344ab348f1e9 Switch to sre for regular expression matching (the new mini-re module
Guido van Rossum <guido@python.org>
parents:
diff changeset
613 is contained in a part of the pattern that did not match, the
344ab348f1e9 Switch to sre for regular expression matching (the new mini-re module
Guido van Rossum <guido@python.org>
parents:
diff changeset
614 corresponding result is None. If a group is contained in a
344ab348f1e9 Switch to sre for regular expression matching (the new mini-re module
Guido van Rossum <guido@python.org>
parents:
diff changeset
615 part of the pattern that matched multiple times, the last
344ab348f1e9 Switch to sre for regular expression matching (the new mini-re module
Guido van Rossum <guido@python.org>
parents:
diff changeset
616 match is returned.
344ab348f1e9 Switch to sre for regular expression matching (the new mini-re module
Guido van Rossum <guido@python.org>
parents:
diff changeset
617
344ab348f1e9 Switch to sre for regular expression matching (the new mini-re module
Guido van Rossum <guido@python.org>
parents:
diff changeset
618 If the regular expression uses the (?P<name>...) syntax, the
344ab348f1e9 Switch to sre for regular expression matching (the new mini-re module
Guido van Rossum <guido@python.org>
parents:
diff changeset
619 groupN arguments may also be strings identifying groups by
344ab348f1e9 Switch to sre for regular expression matching (the new mini-re module
Guido van Rossum <guido@python.org>
parents:
diff changeset
620 their group name. If a string argument is not used as a group
344ab348f1e9 Switch to sre for regular expression matching (the new mini-re module
Guido van Rossum <guido@python.org>
parents:
diff changeset
621 name in the pattern, an IndexError exception is raised.
344ab348f1e9 Switch to sre for regular expression matching (the new mini-re module
Guido van Rossum <guido@python.org>
parents:
diff changeset
622
344ab348f1e9 Switch to sre for regular expression matching (the new mini-re module
Guido van Rossum <guido@python.org>
parents:
diff changeset
623 """
344ab348f1e9 Switch to sre for regular expression matching (the new mini-re module
Guido van Rossum <guido@python.org>
parents:
diff changeset
624 if len(groups) == 0:
344ab348f1e9 Switch to sre for regular expression matching (the new mini-re module
Guido van Rossum <guido@python.org>
parents:
diff changeset
625 groups = (0,)
344ab348f1e9 Switch to sre for regular expression matching (the new mini-re module
Guido van Rossum <guido@python.org>
parents:
diff changeset
626 result = []
344ab348f1e9 Switch to sre for regular expression matching (the new mini-re module
Guido van Rossum <guido@python.org>
parents:
diff changeset
627 for g in groups:
344ab348f1e9 Switch to sre for regular expression matching (the new mini-re module
Guido van Rossum <guido@python.org>
parents:
diff changeset
628 if type(g) == type(''):
344ab348f1e9 Switch to sre for regular expression matching (the new mini-re module
Guido van Rossum <guido@python.org>
parents:
diff changeset
629 try:
344ab348f1e9 Switch to sre for regular expression matching (the new mini-re module
Guido van Rossum <guido@python.org>
parents:
diff changeset
630 g = self.re.groupindex[g]
344ab348f1e9 Switch to sre for regular expression matching (the new mini-re module
Guido van Rossum <guido@python.org>
parents:
diff changeset
631 except (KeyError, TypeError):
344ab348f1e9 Switch to sre for regular expression matching (the new mini-re module
Guido van Rossum <guido@python.org>
parents:
diff changeset
632 raise IndexError, 'group %s is undefined' % `g`
344ab348f1e9 Switch to sre for regular expression matching (the new mini-re module
Guido van Rossum <guido@python.org>
parents:
diff changeset
633 if g >= len(self.regs):
344ab348f1e9 Switch to sre for regular expression matching (the new mini-re module
Guido van Rossum <guido@python.org>
parents:
diff changeset
634 raise IndexError, 'group %s is undefined' % `g`
344ab348f1e9 Switch to sre for regular expression matching (the new mini-re module
Guido van Rossum <guido@python.org>
parents:
diff changeset
635 a, b = self.regs[g]
344ab348f1e9 Switch to sre for regular expression matching (the new mini-re module
Guido van Rossum <guido@python.org>
parents:
diff changeset
636 if a == -1 or b == -1:
344ab348f1e9 Switch to sre for regular expression matching (the new mini-re module
Guido van Rossum <guido@python.org>
parents:
diff changeset
637 result.append(None)
344ab348f1e9 Switch to sre for regular expression matching (the new mini-re module
Guido van Rossum <guido@python.org>
parents:
diff changeset
638 else:
344ab348f1e9 Switch to sre for regular expression matching (the new mini-re module
Guido van Rossum <guido@python.org>
parents:
diff changeset
639 result.append(self.string[a:b])
344ab348f1e9 Switch to sre for regular expression matching (the new mini-re module
Guido van Rossum <guido@python.org>
parents:
diff changeset
640 if len(result) > 1:
344ab348f1e9 Switch to sre for regular expression matching (the new mini-re module
Guido van Rossum <guido@python.org>
parents:
diff changeset
641 return tuple(result)
344ab348f1e9 Switch to sre for regular expression matching (the new mini-re module
Guido van Rossum <guido@python.org>
parents:
diff changeset
642 elif len(result) == 1:
344ab348f1e9 Switch to sre for regular expression matching (the new mini-re module
Guido van Rossum <guido@python.org>
parents:
diff changeset
643 return result[0]
344ab348f1e9 Switch to sre for regular expression matching (the new mini-re module
Guido van Rossum <guido@python.org>
parents:
diff changeset
644 else:
344ab348f1e9 Switch to sre for regular expression matching (the new mini-re module
Guido van Rossum <guido@python.org>
parents:
diff changeset
645 return ()
344ab348f1e9 Switch to sre for regular expression matching (the new mini-re module
Guido van Rossum <guido@python.org>
parents:
diff changeset
646
344ab348f1e9 Switch to sre for regular expression matching (the new mini-re module
Guido van Rossum <guido@python.org>
parents:
diff changeset
647 def groupdict(self, default=None):
344ab348f1e9 Switch to sre for regular expression matching (the new mini-re module
Guido van Rossum <guido@python.org>
parents:
diff changeset
648 """groupdict([default=None]) -> dictionary
15870
010d03853546 Whitespace normalization.
Tim Peters <tim.peters@gmail.com>
parents: 14396
diff changeset
649
13229
344ab348f1e9 Switch to sre for regular expression matching (the new mini-re module
Guido van Rossum <guido@python.org>
parents:
diff changeset
650 Return a dictionary containing all the named subgroups of the
344ab348f1e9 Switch to sre for regular expression matching (the new mini-re module
Guido van Rossum <guido@python.org>
parents:
diff changeset
651 match, keyed by the subgroup name. The default argument is
344ab348f1e9 Switch to sre for regular expression matching (the new mini-re module
Guido van Rossum <guido@python.org>
parents:
diff changeset
652 used for groups that did not participate in the match.
344ab348f1e9 Switch to sre for regular expression matching (the new mini-re module
Guido van Rossum <guido@python.org>
parents:
diff changeset
653
344ab348f1e9 Switch to sre for regular expression matching (the new mini-re module
Guido van Rossum <guido@python.org>
parents:
diff changeset
654 """
344ab348f1e9 Switch to sre for regular expression matching (the new mini-re module
Guido van Rossum <guido@python.org>
parents:
diff changeset
655 dict = {}
344ab348f1e9 Switch to sre for regular expression matching (the new mini-re module
Guido van Rossum <guido@python.org>
parents:
diff changeset
656 for name, index in self.re.groupindex.items():
344ab348f1e9 Switch to sre for regular expression matching (the new mini-re module
Guido van Rossum <guido@python.org>
parents:
diff changeset
657 a, b = self.regs[index]
344ab348f1e9 Switch to sre for regular expression matching (the new mini-re module
Guido van Rossum <guido@python.org>
parents:
diff changeset
658 if a == -1 or b == -1:
344ab348f1e9 Switch to sre for regular expression matching (the new mini-re module
Guido van Rossum <guido@python.org>
parents:
diff changeset
659 dict[name] = default
344ab348f1e9 Switch to sre for regular expression matching (the new mini-re module
Guido van Rossum <guido@python.org>
parents:
diff changeset
660 else:
344ab348f1e9 Switch to sre for regular expression matching (the new mini-re module
Guido van Rossum <guido@python.org>
parents:
diff changeset
661 dict[name] = self.string[a:b]
344ab348f1e9 Switch to sre for regular expression matching (the new mini-re module
Guido van Rossum <guido@python.org>
parents:
diff changeset
662 return dict