正则表达式
正则表达式简历:
正则表达式是一个特殊的字符序列,它能帮助你方便的检查一个字符串是否与某种模式匹配。
在python中通过内置的re库来使用正则表达式,它提供了所有正则表达式的功能。
re模块:
在 Python 中,我们可以使用内置的 re 模块来使用正则表达式。 有一点需要特别注意的是,正则表达式使用 对特殊字符进行转义,所以如果我们要使用原始字符串,只需加一个 r 前缀。如:
代码演示:
import re
path1 = "c:\a\b\c"
#我们只需要打印c:a\b\c
print(path1) # c:\c
# \ 会对特殊字符串进行转义
path2 = "c:\\a\\b\\c"
print(path2) # c:\a\b\c
#我们需要输出原字符串,只需要加一个前缀r
path3 = r"c:\a\b\c"
print(path3) # c:\a\b\c
运行结果:
re 模块的一般使用步骤如下:
- 使用 compile() 函数将正则表达式的字符串形式编译为一个 Pattern 对象 。
- 通过 Pattern 对象提供的一系列方法对文本进行匹配查找,获得匹配结 果,一个 Match 对象。
- 最后使用 Match 对象提供的属性和方法获得信息,根据需要进行其他的 操作 。
compile 函数
compile 函数用于编译正则表达式,生成一个 Pattern 对象。
Pattern 对象的一些常用方法主要有:
- match 方法:从起始位置开始查找,一次匹配
- search 方法:从任何位置开始查找,一次匹配
- findall 方法:全部匹配,返回列表
- finditer 方法:全部匹配,返回迭代器
- split 方法:分割字符串,返回列表
- sub 方法:替换
findall 方法
搜索整个字符串,获得所有匹配的结果,使用的是findall()方法 findall 方法的使用形式如下: findall(string[, pos[, endpos]])
其中,string 是待匹配的字符串,pos 和 endpos 是可选参数,指定字符串的起 始和终点位置,默认值分别是 0 和 len (字符串长度)。
findall 以列表形式返回全部能匹配的子串,如果没有匹配,则返回一个空列表。
示例如下:
代码演示:
import re
# 1. 将正则表达式编译成一个 pattern 对象
pattern = re.compile("we")
# 2. 使用findall 方法 全局搜索,返回一个列表
m1 = pattern.findall("we are well welcome")
print(m1)
#使用 \b 字符进行匹配,只匹配we单词,不匹配其他含有we的单词
#1. 使用正则表达式是编译一个pattern对象
pattern = re.compile(r"\bwe\b")
#2. 使用findall 方法全局搜索,返回列表
m2 = pattern.findall("we are well Welcome")
print(m2)
运行结果:
常见字符串:
示例如下:
代码演示:
import re
# \d 匹配数字
pattern1 = re.compile("\d")
result1 = pattern1.findall("helll 123 v 907 v")
print(result1) #['1', '2', '3', '9', '0', '7']
# \d+ 匹配一个或多个数字,如果是数字,则必须连续
pattern2 = re.compile("\d+")
result2 = pattern2.findall("i you me 2323 hu32 ")
print(result2) #['2323', '32']
# \d{3,} 匹配 3次 或 多次 必须 连续
pattern3 = re.compile("\d{3,}")
result3 = pattern3.findall("he o0t87 bjv 345")
print(result3)
# \d{3} 连续匹配3次
pattern4 = re.compile("\d{3}")
result4 = pattern4.findall("huy 453f2 dder 2 3455")
print(result4)
# \d{1,2}可以匹配一次,也可以匹配2次,以更多的优先
pattern5 =re.compile("\d{1,2}")
result5 = pattern5.findall("huy 453f2 dder 2 3455")
print(result5)
# re.I 表示忽略大小写,[a-z]{5}匹配a-z的字母5次
pattern6 = re.compile("[a-z]{5}",re.I)
result6 = pattern6.findall("huypythonjava 453f2 dder 2 3455")
print(result6)
# re.I 表示忽略大小写,[a-z]{8}匹配a-z的字母8次
#只查找字符串0-8之间的字符,要前不要后【左闭右开】
pattern13 = re.compile("[a-z]{8}",re.I)
result13 = pattern13.findall("huppython 453f2 dder 2 3455",0,8)
print(result13)
# \w 匹配数字、字母、下划线 ,一次 或 多次
pattern7 = re.compile("\w+")
result7 =pattern7.findall("huy 453f2 dder 2 3455")
print(result7)
# \W+ 匹配不是下划线、字母、数字
pattern8 = re.compile("\W+")
result8 = pattern8.findall("huy 453f2 dder 2 3455")
print(result8)
# [\w\W]+ 可以匹配所有字符,一次 或 多次
pattern9 = re.compile("[\w\W]+")
result9 = pattern9.findall("hu@#y 45$$$3f2 dder 2 3455")
print(result9)
# [abc]+ 匹配 a 或 b 或 c 一次 或 多次
pattern10 = re.compile("[abc]+")
result10 = pattern10.findall("huy 453abcf2 ddaber 2c 3455")
print(result10)
# [^abc[123]+ 匹配不是abc 或 12 的字符
pattern11 = re.compile("[^abc[123]+")
result11 = pattern11.findall("huy 453abcf2 ddaber 2c 3455")
print(result11)
# .* 匹配任意字符,除了换行符
pattern12 = re.compile(".*")
result12 = pattern12.findall("huy 453abcf2 ddaber 2c 3455")
print(result12)
运行结果:
今天先写这里啦