re简介
正则表达式会被python解释器编译成字节码,这样查找的效率比单纯用python代码实现查找要快,但是匹配统一内容可以有多种不同的正则表达式,并且他们的效率各不相同
特殊符号
|
|
匹配这些特殊符号需要使用\
进行转义
.
匹配除换行符以外的任意字符,如果指定了DOTALL
标志,则匹配所有字符,但注意.
表示仅仅匹配一个字符
|
|
^
匹配字符串的开始,当指定MULTILINE
标志,则匹配每一行的开头
|
|
###
匹配字符串的结尾,当指定MULTILINE
标志,则匹配每一行的结尾(匹配换行符之前的)
|
|
*
*
表示0个或多个前一字符或正则
|
|
+
+
表示1个或多个前一字符或正则
|
|
?
?
表示0个或1个前一字符或正则
|
|
*?
+?
??
*
+
?
都是贪婪的,会匹配最长的
|
|
在这些操作符后面添加?
能够使之变为不贪婪的,也就是匹配最短的
|
|
{m}
{m}
表示m个前一字符或正则
|
|
{m,n}
{m,n}
表示m到n个前一字符或正则 注意:,
后面没有空格
|
|
省略m表示没有下限,省略n表示没有上限
|
|
{m,n}?
{m,n}
会匹配最长的,在后面加?
,则匹配最短的
|
|
[]
[]
指定一组字符
|
|
很多特殊符号在[]
环境内无效,其他特殊符号需要转义:
|
|
[]
内的^
表示非,^^
表示除^
以外的全部字符:
|
|
|
|
也就是或,注意也是短路操作
|
|
(...)
匹配圆括号里的RE匹配的内容,并指定组的开始和结束位置。组里面的内容可以被提取,要匹配(
和)
,则需要使用转义符号或者是[(]
,[)]
(?aiLmsux)
i
,L
,m
,s
,u
,x
里的一个或多个字母。表达式不匹配任何字符,但是指定相应的标志:re.I
(忽略大小写)、re.L
(依赖locale)、re.M
(多行模式)、re.S
(.匹配所有字符)、re.U
(依赖Unicode)、re.X
(详细模式)
|
|
(?P<name>...)
和普通的圆括号类似,但是子串匹配到的内容将可以用命名的name
参数来提取。组的name
必须是有效的python标识符,而且在本表达式内不重名。命名了的组和普通组一样,也用数字来提取,也就是说名字只是个额外的属性。
|
|
special sequences
\number
表示之前的分组
|
|
\A
仅匹配字符串的开头
|
|
\b
表示单词开始和结尾处的空白字符以及非字母非数字的字符
|
|
\B
\b
的反面
|
|
\s
匹配空白字符,包括[ \t\n\r\f\v]
|
|
\S
\s
的反面
|
|
\w
匹配数字和字母
|
|
\W
\w
的反面
|
|
\Z
匹配字符串结尾
|
|
re
模块方法
re.compile(pattern, flags=0)
编译一个正则表达式为一个正则表达式对象,之后就可以使用该对象对字符串进行匹配了
re.search(pattern, string, flags=0)
从字符串的开头开始搜索匹配,返回匹配到的第一个
re.match(pattern, string, flags=0)
返回字符串中匹配的第一个
re.fullmatch(pattern, string, flags=0)
对整个字符串进行匹配
re.split(pattern, string, maxsplit=0, flags=0)
凭正则表达式分割字符串
re.findall(pattern, string, flags=0)
如果匹配模式中包含分组,则返回分组,如果有多个分组,则返回分组组成的元组
re.finditer(pattern, string, flags=0)
返回迭代器
re.sub(pattern, repl, string, count=0, flags=0)
替换
Match Objects
像match()
search()
等方法返回的就是一个Match
对象,该对象包括的属性和方法请看官方文档
注意,关于分组,第0组就是匹配到的字符串
|
|