Python正则表达式整理
#功能:
#匹配、搜索、替换、分割
re.compile(pattern[, flags]) 编译正则表达式pattern为 `RegexObject` 实例,可以为不同的操作提供方法,如模式匹配搜索或字符串替换等。
re.search(pattern, string[, flags]) 扫描字符串string,找到与 pattern匹配的元素,并返回 MatchObject实例,没有找到匹配的元素则返回None
re.match(pattern, string[, flags]) 扫描字符串string,看string是不是与该 pattern匹配,匹配则返回 MatchObject实例,不匹配则返回None
re.split(pattern, string[, maxsplit=0]) 扫描字符串string,将与pattern匹配的子串作为分隔符来分割string,可以指定最大分割次数。如果指定0,则表示全部分割。返回值为分割后的字串组成的列表。
re.findall(pattern, string[, flags]) 扫描字符串string,将string中所有与pattern匹配的子串以列表的形式返回
*re.finditer(pattern, string[, flags]) 扫描字符串string,返回string中所有与pattern匹配的子串的迭代器
re.sub(pattern, repl, string[, count]) 扫描字符串string,替换所有与pattern匹配的子串为repl,并可以通过设置count的值来指定最大替换次数,返回替换后的字符串,count为0时替换全部符合pattern的字串
re.subn(pattern, repl, string[, count]) 与re.sub()同,只不过返回的是一个元组,元组第一项为替换后的字符串,第二项为替换了的次数
re.escape(string) 将字符串中的non-alphanumerics字符(我已不知道该怎么翻译比较好了)用反义字符的形式显示出来。
Regular Expression Objects
RegexObject.match(string[, pos[, endpos]])
RegexObject.search(string[, pos[, endpos]])
RegexObject.split(string[, maxsplit=0])
RegexObject.findall(string[, pos[, endpos]])
RegexObject.finditer(string[, pos[, endpos]])
RegexObject.sub(repl, string[, count=0])
RegexObject.subn(repl, string[, count=0])
RegexObject.flags
RegexObject.groupindex
RegexObject.pattern
Match Objects
MatchObject.expand(template) 根据一个模版用找到的内容替换模版里的相应位置 。它根据一个模版来用匹配到的内容替换模版中的相应位置,组成一个新的字符串返回。它使用\g<index|name>或 \index 来指示一个组。
MatchObject.group([group1, ...]) 获取匹配的组,缺省返回组0,也就是全部值
MatchObject.groups([default]) 返回全部的组
MatchObject.start([group]) 获取匹配的组的开始位置
MatchObject.end([group]) 获取匹配的组的结束位置
MatchObject.span([group]) 获取匹配的组的(开始,结束)位置
MatchObject.pos
MatchObject.endpos
MatchObject.lastindex
MatchObject.lastgroup
MatchObject.re
MatchObject.string
pattern: 正则表达式模式
string: 进行操作的字符串对象
flags:可选参数,进行匹配的标志
maxsplit:可选参数,最大分割次数
repl:要替换成的内容
count:可选参数,最大替换次数
pos:可选参数,进行匹配、查找的起始位置
endpos:可选参数,进行匹配、查找的结束位置
group: 可选参数,分组编号,可以为组的名字或数字编号(从1开始算起)
基本元字符:
. 匹配任意单个字符
| 逻辑或操作符
[] 匹配字符集合中的一个字符
[^]对字符集合求非
- 定义一个区间(例如[a-z])
\ 对下一个字符转义
数量元字符
* 匹配前一个字符(子表达式)的零次或多次重复
*? *的懒惰型版本
+ 匹配前一个字符(子表达式)的一次或多次重复
+? +的懒惰型版本
? 匹配前一个字符(子表达式)的零次或一次重复
{n} 匹配前一个字符(子表达式)的n次重复
{m,n} 匹配前一个字符(子表达式)至少m次重复,至多n次重复
{m,n}? {m,n}的懒惰型版本,原来能匹配n个旧匹配n个,现在能匹配m个就匹配m个
{n,} 匹配前一个字符(子表达式)n次或更多次重复
{n,}? {n,}的懒惰型版本
位置元字符
^匹配字符串的开头,多行模式下为每行的开头
\A 匹配字符串开头,单行模式下匹配每一行开头,多行模式下只匹配第一行开头
$ 匹配字符串结束,多行模式下为每行的结束
\Z 匹配字符串结束,单行模式下匹配每一行结束,多行模式下只匹配最后一行结束
【\< 匹配单词的开头】
【\> 匹配单词的结束】
\b 匹配单词边界:[^a-zA-Z0-9]
\B 匹配非单词边界:[^\b]
以'\'开头的元字符
\d 匹配任何十进制数: [0-9]。
\D 匹配任何非数字字符: [^0-9]。
\s 匹配任何空白字符: [ \t\n\r\f\v]。
\S 匹配任何非空白字符: [^ \t\n\r\f\v]。
\w 匹配任何字母数字字符: [a-zA-Z0-9_]。
\W 匹配任何非字母数字字符: [^a-zA-Z0-9_]。
\b 匹配单词边界:[^a-zA-Z0-9]
\B 匹配非单词边界:[^\b]
\A 匹配字符串起始位置,单行模式下匹配每一行起始位置,多行模式下只匹配第一行起始位置
\Z 匹配字符串结束位置,单行模式下匹配每一行结束位置,多行模式下只匹配最后一行结束位置
\number 匹配组名称相同的字符串。
[\b] 退格符
\c 匹配一个控制字符
\f 换页符
\n 换行符
\r 回车符
\t 制表符(Tab字符)
\v 垂直制表符
\\ 匹配一个反斜杠本身
\x 匹配一个十六进制数字
\0 匹配一个八进制数字
flags
DOTALL, S 使 . 匹配包括换行在内的所有字符
IGNORECASE, I 使匹配对大小写不敏感
LOCALE, L 做本地化识别(locale-aware)匹配
MULTILINE, M 多行匹配,影响 ^ 和 $
VERBOSE, X 能够使用 REs 的 verbose 状态,使之被组织得更清晰易
UNICODE, U 匹配Unicode字符
回溯引用和前后查找
() 定义一个子表达式
\1 匹配地1个子表达式;\2代表第2个子表达式,依次类推
?= 向前查找
?<= 向后查找
?! 负向查找
?!= 负向后查找
?() 条件(if then)
?()| 条件(if then else)
大小写转换
\E 结束\L或\U转换
\l 把下一个字符转换为小写
\L 把后面的字符转换为小写,直到遇见\E为止
\u 把下一个字符转换为大写
\U 把后面的字符转换为大写,知道遇见\E位置
匹配模式
(?m) 分行匹配模式
I IGNORECASE 忽略大小写区别。
L LOCAL 字符集本地化。这个功能是为了支持多语言版本的字符集使用环境的,比如在转义符\w,在英文环境下,它代表[a-zA-Z0-9],即所以英文字符和数字。如果在一个法语环境下使用,缺省设置下,不能匹配"é" 或 "?"。加上这L选项和就可以匹配了。不过这个对于中文环境似乎没有什么用,它仍然不能匹配中文字符。
M MULTILINE 多行匹配。在这个模式下’^’(代表字符串开头)和’$’(代表字符串结尾)将能够匹配多行的情况,成为行首和行尾标记。比如
>>> s=’123 456\n789 012\n345 678’
>>> rc=re.compile(r’^\d+’) #匹配一个位于开头的数字,没有使用M选项
>>> rc.findall(s)
['123'] #结果只能找到位于第一个行首的’123’
>>> rcm=re.compile(r’^\d+’,re.M) #使用 M 选项
>>> rcm.findall(s)
['123', '789', '345'] #找到了三个行首的数字
同样,对于’$’来说,没有使用M选项,它将匹配最后一个行尾的数字,即’678’,加上以后,就能匹配三个行尾的数字456 012和678了.
>>> rc=re.compile(r’\d+$’)
>>> rcm=re.compile(r’\d+$’,re.M)
>>> rc.findall(s)
['678']
>>> rcm.findall(s)
['456', '012', '678']
S DOTALL ‘.’号将匹配所有的字符。缺省情况下’.’匹配除换行符’\n’外的所有字符,使用这一选项以后,’.’就能匹配包括’\n’的任何字符了。
U UNICODE \w, \W, \b, \B, \d, \D, \s 和 \S都将使用Unicode。
X VERBOSE 这个选项忽略规则表达式中的空白,并允许使用’#’来引导一个注释。这样可以让你把规则写得更美观些。比如你可以把规则
>>> rc = re.compile(r"\d+|[a-zA-Z]+") #匹配一个数字或者单词使用X选项写成:
>>> rc = re.compile(r""" # start a rule\d+ # number| [a-zA-Z]+ # word""", re.VERBOSE)在这个模式下,如果你想匹配一个空格,你必须用'\ '的形式('\'后面跟一个空格)
浙公网安备 33010602011771号