您的位置:首页 > 编程语言 > Python开发

Python 正则表达式 re

2011-11-08 16:15 399 查看
flags:

re.I (ignore case),

re.L (locale dependent),

re.M (multi-line),

re.S (dot matches all),

re.U (Unicode dependent),

re.X (verbose), for the entire regular expression.

Python offers two different primitive operations based on regular expressions:

match checks for a match only at the beginning of the string

search checks for a match anywhere in the string (this is what Perl does by default).

The special characters are:

'.'(Dot.) In the default mode, this matches any character except a newline. If theDOTALL flag has been specified, this matches any character
including a newline.'^' (Caret.) Matches the start of the string, and in
MULTILINE mode also matches immediately after each newline.'$' Matches the end of the string or just before the newline at the end of the string, and inMULTILINE mode also matches before a
newline.foo matches both ‘foo’ and ‘foobar’, while the regular expressionfoo$ matches only ‘foo’. More interestingly, searching forfoo.$
in 'foo1\nfoo2\n' matches ‘foo2’ normally, but ‘foo1’ inMULTILINE mode;
searching for a single$ in'foo\n' will find two (empty) matches: one just before the newline, and one at the end of the string.'*' Causes the resulting RE to match 0 or more repetitions of the preceding RE, as many repetitions as are possible.ab* will match ‘a’, ‘ab’, or ‘a’ followed by any number of ‘b’s.'+' Causes the resulting RE to match 1 or more repetitions of the preceding RE.
ab+ will match ‘a’ followed by any non-zero number of ‘b’s; it will not match just ‘a’.'?' Causes the resulting RE to match 0 or 1 repetitions of the preceding RE.
ab? will match either ‘a’ or ‘ab’. *?,
+?, ??The '*',
'+', and '?' qualifiers are allgreedy; they match as much text as possible. Sometimes this behaviour isn’t desired; if the RE<.*>
is matched against'<H1>title</H1>', it will match the entire string, and not just'<H1>'. Adding'?'
after the qualifier makes it perform the match innon-greedy orminimal fashion; as
few characters as possible will be matched. Using.*? in the previous expression will match only'<H1>'.{m} Specifies that exactly m copies of the previous RE should be matched; fewer matches cause the entire RE not to match. For example,a{6} will match exactly six'a'
characters, but not five.{m,n} Causes the resulting RE to match from m to n repetitions of the preceding RE, attempting to match as many repetitions as possible. For example,a{3,5} will match from 3 to 5'a'
characters. Omittingm specifies a lower bound of zero, and omitting
n specifies an infinite upper bound. As an example,a{4,}b will matchaaaab or a thousand
'a' characters followed by ab, but notaaab. The comma may not be omitted or the
modifier would be confused with the previously described form.{m,n}? Causes the resulting RE to match from m to n repetitions of the preceding RE, attempting to match asfew repetitions as possible. This is the non-greedy version of the previous qualifier. For example, on the 6-character string'aaaaaa',a{3,5}
will match 5 'a' characters, whilea{3,5}? will only match 3 characters.'\'
Either escapes special characters (permitting you to match characters like'*','?', and so forth), or signals a special sequence;
special sequences are discussed below.
If you’re not using a raw string to express the pattern, remember that Python also uses the backslash as an escape sequence in string literals; if the escape sequence isn’t recognized by Python’s parser, the backslash and subsequent character
are included in the resulting string. However, if Python would recognize the resulting sequence, the backslash should be repeated twice. This is complicated and hard to understand, so it’s highly recommended that you use raw strings for all but the simplest
expressions.
[]
Used to indicate a set of characters. Characters can be listed individually, or a range of characters can be indicated by giving two characters and separating them by a'-'. Special
characters are not active inside sets. For example,[akm$] will match any of the characters'a','k',
'm', or'$';[a-z] will match any lowercase letter, and[a-zA-Z0-9]
matches any letter or digit. Character classes such as\w or\S (defined below) are also acceptable inside a range, although the characters
they match depends on whetherLOCALE orUNICODE
mode is in force. If you want to include a']' or a'-' inside a set, precede it with a backslash, or place it as the first character. The pattern[]]
will match']', for example.
You can match the characters not within a range by complementing the set. This is indicated by including a'^' as the first character of the set;'^'
elsewhere will simply match the'^' character. For example,[^5] will match any character except'5',
and [^^] will match any character except'^'.

Note that inside [] the special forms and special characters lose their meanings and only the syntaxes described here are valid. For example,+,*,
(,), and so on are treated as literals inside[], and backreferences cannot be used
inside[].
'|' A|B, where A and B can be arbitrary REs, creates a regular expression that will match either A or B. An arbitrary number of REs can be separated by the'|'
in this way. This can be used inside groups (see below) as well. As the target string is scanned, REs separated by'|' are tried from left to right. When one pattern completely matches, that branch
is accepted. This means that onceA matches,B will not be tested further, even if it would produce a longer overall match. In other words,
the'|' operator is never greedy. To match a literal'|', use
\|, or enclose it inside a character class, as in
[|]. (...) Matches whatever regular expression is inside the parentheses, and indicates the start and end of a group; the contents of a group can be retrieved after a match has been performed, and can be matched later in the string with the\number
special sequence, described below. To match the literals'(' or')', use
\( or\), or enclose them inside a character class:[(][)].(?...) This is an extension notation (a '?' following a'(' is not meaningful otherwise). The first character after the'?'
determines what the meaning and further syntax of the construct is. Extensions usually do not create a new group;(?P<name>...) is the only exception to this rule. Following are the currently supported
extensions.(?iLmsux)
(One or more letters from the set 'i','L','m',
's','u','x'.) The group matches the empty string; the letters set the corresponding
flags:re.I (ignore case),re.L
(locale dependent),re.M (multi-line),re.S
(dot matches all),re.U (Unicode dependent), andre.X
(verbose), for the entire regular expression. (The flags are described inModule Contents.) This is useful if you wish to include the flags as part of the regular expression, instead of passing aflag
argument to there.compile() function.
Note that the (?x) flag changes how the expression is parsed. It should be used first in the expression string, or after one or more whitespace characters. If there are non-whitespace
characters before the flag, the results are undefined.
(?:...) A non-capturing version of regular parentheses. Matches whatever regular expression is inside the parentheses, but the substring matched by the groupcannot be retrieved after performing a match or referenced later in the pattern.(?P<name>...)
Similar to regular parentheses, but the substring matched by the group is accessible within the rest of the regular expression via the symbolic group namename. Group names must be valid Python identifiers, and each group name must
be defined only once within a regular expression. A symbolic group is also a numbered group, just as if the group were not named. So the group namedid in the example below can also be referenced as
the numbered group1.
For example, if the pattern is (?P<id>[a-zA-Z_]\w*), the group can be referenced by its name in arguments to methods of match objects, such asm.group('id')
or m.end('id'), and also by name in the regular expression itself (using(?P=id)) and replacement text given to.sub()
(using \g<id>).
(?P=name) Matches whatever text was matched by the earlier group named name. (?#...) A comment; the contents of the parentheses are simply ignored. (?=...) Matches if ... matches next, but doesn’t consume any of the string. This is called a lookahead assertion. For example,Isaac(?=Asimov)
will match'Isaac' only if it’s followed by'Asimov'.(?!...) Matches if ... doesn’t match next. This is a negative lookahead assertion. For example,Isaac(?!Asimov) will match'Isaac'
only if it’snot followed by 'Asimov'.(?<=...)
Matches if the current position in the string is preceded by a match for... that ends at the current position. This is called apositive lookbehind assertion.(?<=abc)def
will find a match inabcdef, since the lookbehind will back up 3 characters and check if the contained pattern matches. The contained pattern must only match strings of some fixed length, meaning thatabc
ora|b are allowed, but
a* anda{3,4} are not. Note that patterns which start with positive lookbehind assertions will never match at the beginning of the string being
searched; you will most likely want to use thesearch() function rather than thematch()
function:

>>> import re
>>> m = re.search('(?<=abc)def', 'abcdef')
>>> m.group(0)
'def'


This example looks for a word following a hyphen:

>>> m = re.search('(?<=-)\w+', 'spam-egg')
>>> m.group(0)
'egg'


(?<!...) Matches if the current position in the string is not preceded by a match for
.... This is called a negative lookbehind assertion. Similar to positive lookbehind assertions, the contained pattern must only match strings of some fixed length. Patterns which start with negative lookbehind assertions
may match at the beginning of the string being searched. (?(id/name)yes-pattern|no-pattern) Will try to match with yes-pattern if the group with given id or name exists, and with no-pattern if
it doesn’t. no-pattern is optional and can be omitted. For example, (<)?(\w+@\w+(?:\.\w+)+)(?(1)>) is
a poor email matching pattern, which will match with '<user@host.com>' as well as 'user@host.com',
but not with '<user@host.com'.

New in version 2.4.

\number
Matches the contents of the group of the same number. Groups are numbered starting from 1. For example, (.+) \1 matches 'the the' or '55 55',
but not 'the end' (note the space after the group). This special sequence can only be used to match one of the first 99 groups. If the first digit of number is 0,
or number is 3 octal digits long, it will not be interpreted as a group match, but as the character with octal value number. Inside the '[' and ']' of
a character class, all numeric escapes are treated as characters.\AMatches only at the start of the string.\bMatches the empty string, but only at the beginning or end of a word. A word is defined as a sequence of alphanumeric or underscore characters, so the end of a word is indicated by whitespace or a non-alphanumeric, non-underscore character. Note that \b is
defined as the boundary between \w and \W, so the precise set of characters deemed to be alphanumeric depends on the values of the UNICODE and LOCALE flags.
Inside a character range, \brepresents the backspace character, for compatibility with Python’s string literals.\BMatches the empty string, but only when it is not at the beginning or end of a word. This is just the opposite of \b, so is also subject to the settings ofLOCALE and UNICODE.\dWhen the UNICODE flag is not specified, matches any decimal digit; this is equivalent
to the set [0-9]. With UNICODE,
it will match whatever is classified as a decimal digit in the Unicode character properties database.\DWhen the UNICODE flag is not specified, matches any non-digit character; this is equivalent
to the set [^0-9]. With UNICODE,
it will match anything other than character marked as digits in the Unicode character properties database.\sWhen the LOCALE and UNICODE flags
are not specified, matches any whitespace character; this is equivalent to the set [ \t\n\r\f\v]. With LOCALE,
it will match this set plus whatever characters are defined as space for the current locale. If UNICODE is
set, this will match the characters [ \t\n\r\f\v]plus whatever is classified as space in the Unicode character properties database.\SWhen the LOCALE and UNICODE flags
are not specified, matches any non-whitespace character; this is equivalent to the set [^ \t\n\r\f\v] With LOCALE,
it will match any character not in this set, and not defined as space in the current locale. If UNICODE is
set, this will match anything other than [\t\n\r\f\v] and characters marked as space in the Unicode character properties database.\wWhen the LOCALE and UNICODE flags
are not specified, matches any alphanumeric character and the underscore; this is equivalent to the set [a-zA-Z0-9_]. With LOCALE,
it will match the set [0-9_] plus whatever characters are defined as alphanumeric for the current locale. If UNICODE is
set, this will match the characters [0-9_] plus whatever is classified as alphanumeric in the Unicode character properties database.\WWhen the LOCALE and UNICODE flags
are not specified, matches any non-alphanumeric character; this is equivalent to the set [^a-zA-Z0-9_]. WithLOCALE,
it will match any character not in the set [0-9_], and not defined as alphanumeric for the current locale. If UNICODE is
set, this will match anything other than [0-9_] and characters marked as alphanumeric in the Unicode character properties database.\ZMatches only at the end of the string.

Module Contents:

re.compile(pattern[,flags])re.I re.IGNORECASEre.L re.LOCALEre.M re.MULTILINEre.S re.DOTALLre.U re.UNICODEre.X re.VERBOSEre.search(pattern,string[,flags])re.match(pattern,string[,flags])re.split(pattern,string[,maxsplit=0,
flags=0])re.findall(pattern,string[,flags])re.finditer(pattern,string[,flags])re.sub(pattern,repl,string[,
count, flags])re.subn(pattern,repl,string[,
count, flags])re.escape(string)re.purge()exception
re.error

USE

Modifying Strings
Method/AttributePurpose
split()Split the string into a list, splitting it wherever the RE matches
sub()Find all substrings where the RE matches, and replace them with a different string
subn()Does the same thing as sub(), but returns the new string and the number of replacements
Performing Matches

Method/Attribute Purpose

match()Determine if the RE matches at the beginning of the string.

search()Scan through a string, looking for any location where this RE matches.

findall()Find all substrings where the RE matches, and returns them as a list.

finditer()Find all substrings where the RE matches, and returns them as aniterator.

Methods of MatchObject instance

Method/Attribute Purpose

group()Return the string matched by the RE

start()Return the starting position of the match

end()Return the ending position of the match

span()Return a tuple containing the (start, end) positions of the match
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: