几乎所有语言中的正则表达式都有相类似的语法,python亦莫能外。
快速入门
#后续代码均默认导入re,且使用test
import re
test = '''
`[]`表示一个字符集合,在匹配时可以匹配集合中的任意值。例如`[abc]`可以匹配`asdzxc`中的`a`和`c`。
通过`-`可以表示某个范围,例如`[a0-9]`表示匹配`a`和数字。
在`[]`中,特殊字符`+*()`将失去意义,会以普通的字符形式出现。而`^`将表示`非`,使用`^`之后将忽略对`[]`中的值的匹配。
'''
接下来直观地看一下最常用的的三大函数
>>> print(re.match(r'[0-9]',test))
None
>>> re.search(r'[0-9]',test)
<re.Match object; span=(81, 82), match='0'>
>>> test[81:82]
'0' #说明search匹配到了0
>>> re.findall(r'[0-9]',test)
['0', '9']
其中,re.match
要求从头匹配;search
可以从任意位置匹配,但只返回第一个匹配的值的位置;findall
返回所有符合要求的值。
匹配格式
任意字符
-
.
匹配除了换行符之外的所有字符,在DOTALL
模式下包括换行符
开头结尾符号
-
^
匹配字符串的开头,在MULTILIME
模式下为行开头 -
$
匹配字符串结尾,在MULTILIME
模式下匹配行结尾
后置修饰符,针对修饰符前面的正则表达式进行匹配
-
*
匹配0到任意次重复,例如a*b
可以匹配b
,ab
,aab
等等 -
+
匹配1到任意次重复,例如a*b
不可匹配b
,但可匹配ab
,aab
等等 -
?
匹配0或1次,例如a?b
只能匹配aaaab
中的ab
-
{m}
匹配m次,而且不可更改。例如a{2}
只能匹配aa
-
{m,n}
匹配m到n次重复,且尽可能多,例如a{2,4}
可以匹配aa
,aaa
,aaaa
此外,?
可以修饰其他后置修饰符,表示非贪婪形式,例如a{2,4}
将尽可能少地匹配出现的字符。
或运算符|
可以连接两个正则表达式,例如A|B
可以匹配A
或者B
。
[]表达式
[]
表示一个字符集合,在匹配时可以匹配集合中的任意值。例如[abc]
可以匹配asdzxc
中的a
和c
。
通过-
可以表示某个范围,例如[a0-9]
表示匹配a
和数字。
在[]
中,特殊字符+*()
将失去意义,会以普通的字符形式出现。而^
将表示非
,使用^
之后将忽略对[]
中的值的匹配。
转义字符
除了Python中的标准转义字符之外,正则表达式还提供了一些其他含义的转义字符。
小写 | 匹配内容 | 大写 | 匹配内容 |
---|---|---|---|
\w |
数字字母下划线 | \W |
非数字字母下划线 |
\s |
空白字符 | \S |
非空白字符 |
\d |
数字 | \D |
非数字 |
\A |
字符开始 | ||
\z |
字符结束 | \Z |
只匹配到换行前的结束字符 |
\b |
单词便捷 | \B |
非单词便捷 |
正则表达式标签:
re.match
等函数的输入参数为
re.match(pattern, string, flags=0)
其中,pattern
即为将要匹配的模式;string
为待匹配字符串,flag
则是正则表达式的标签,起到一些其他的作用,可选参数如下
模式 | 简写 | 说明 |
---|---|---|
re.ASCII | re.A | 只匹配ASCII |
re.UNICODE | re.U | 根据Unicode解析字符(默认) |
re.IGNORECASE | re.I | 对大小写不敏感 |
re.LOCALE | re.L | 由当前语言决定\w, \W, \b, \B 以及大小写匹配 |
re.MULTILINE | re.M | 多行匹配 |
re.DOTALL | re.S | 匹配包括换行在内的所有字符 |
re.VERBOSE | re.X | 认为# 后面的是注释 |
re.TEMPLATE | re.T | 禁用回溯 |
re.DEBUG | 显示编译时的debug信息 |
Pattern
通过re.compile
可以将待匹配字符串编译为正则对象Pattern
,可更加方便地进行调用。例如
>>> p = re.compile(r'[0-9]')
>>> p.findall(test)
['0', '9']
>>> p.pattern #pattern属性即编译前的字符串形式
'[0-9]'
Pattern
对象中的成员方法可以和re
模块下的函数实现相同的功能。记pat
为正则字符串,p
为re.compile(pat)
编译而成的正则对象,则就findall
这个函数而言,re.findall(pat,test)
就等价于p.findall(test)
。文章来源:https://www.toymoban.com/news/detail-739131.html
除了findall
之外,下表中的函数均支持这种转换文章来源地址https://www.toymoban.com/news/detail-739131.html
- search:返回第一个匹配位置的对象;如无匹配返回None
- match:要求从头匹配,其余和
search
相同 - fullmatch:若整个
test
与正则表达式匹配则返回匹配对象,否则返回None - findall:返回所有匹配内容的列表
- finditer:返回所有匹配位置的列表
- spilt:通过正则表达式对字符串进行分割
- sub:用于字符串的替代
- subn:与
sub()
相同,但是返回一个元组 - escape:对正则表达式中的特殊字符进行转义
到了这里,关于速通Python正则表达式的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!