re方法
re.search()
re.search(pattern,string,flags=0)
例:re.search(r'love','I love you')
re.findall()
返回一个符合pattern的全部字符的list。
re.compile()
p=re.compile(r'[a-z]')
res=re.findall(p,'iLadfaww')
print(res)
['i', 'a', 'd', 'f', 'a', 'w', 'w']
p=re.compile(r'[a-z]+',re.IGNORECASE)
res=p.search('ADSwqefS',2,5)#后两个参数表示范围
print(res)
<_sre.SRE_Match object; span=(2, 5), match='Swq'>
代码
p=re.compile(r'(Love) (You)')
res=p.search('I Love You')
print(res.group(0))
print(res.group(1))
print(res.group(2))
print(res.start())
print(res.end())
print(res.span())
Love You
Love
You
2
10
(2, 10)
编译标志
编译标志有两个名字:完整名和简写名
1.ASCII,A:使得w
,,
s
和d
只能匹配ASCII字符
2.DOTALL,S:使得.
匹配任何符号,包括换行符
3.IGNORECASE,I:不区分大小写
4.LOCALE,L:支持当前的语言,区域设置
5.MULTILINE,M:多行匹配,影响^
和$
6.VERBOSE,X :启用详细的正则表达式
正则Pattern
d
:匹配数字
D
:与d
相反,相当于[^0-9]
s
:匹配任何空白字符(包含空格,换行符,制表符等),相当于[
fv]
S
:与上相反
w
匹配任何单词字符
W
与上相反
匹配单词的开始或者结束。
在字符类中可表示空格
B
与上相反
.
:匹配除换行符以外的任何字符
|
:或
*
:匹配前面的表达式0次或者而多次=={0,}
+
:匹配前面的表达式1次或者多次=={1,}
?
:匹配前面的表达式0次或者1次=={0,1}
:
1.转义字符
2.类似于d
这种用途
3.引用序号对应的子组所对应的字符串(两位数)
r'(ABC)(.com)2'匹配的就是'ABC.com.com’
4.(三位数,首位可为0)表示八进制数所代表的ASCII码
[..]
:字符类,匹配所包含的任意一个字符
^
:
1.匹配字符串的开始位置
2.如果设置了re.MULTILINE标志,则表示换行符之后的位置
3.[^..]
取反,只能放在最开头。若不在最开头,则表示^
本身。
%
:
1.匹配字符串的结束位置,
2.如果设置了re.MULTILINE标志,则表示换行符之前的位置
{M,N}
:匹配前面的内容M~N次
[a-z]
:匹配a-z
ab{3}z
:匹配abbbc
ab{3,10}c
:匹配a(3-10个)bc
零宽断言
^
$
A
等用于指定位置,这个位置应满足的一定的条件(即断言),称为零宽断言。
前向肯定断言
(?=exp)
例abc(?=.com)
只会匹配后面紧跟着.com
的abc
前向否定断言
(?!exp)
后向肯定断言
(?<=exp)
例:(?<=abc).com
只会匹配前面为abc
的.com
后向否定断言
(?<!exp)
贪婪与非贪婪
默认是贪婪模式(在符合条件下尽可能多的匹配):
res=re.search(r'ABC{2,8}','ABCCCCCC')
print(res)
<_sre.SRE_Match object; span=(0, 8), match='ABCCCCCC'>
可以利用?
变为非贪婪模式
res=re.search(r'ABC{2,8}?','ABCCCCCC')
print(res)
<_sre.SRE_Match object; span=(0, 4), match='ABCC'>
捕获
使用(....)
会捕获其中内容
使用(?:...)
不会捕获其中内容
例子
匹配ip地址
res=re.search(r'((dd|d|1dd|2[0-4]d|25[0-5]).){3}((dd|d|1dd|2[0-4]d|25[0-5]))','2.1.1.1')
相关博客:Python3如何优雅地使用正则表达式