# 1. 正则表达式
# 元字符
# . 除了换行符外任意字符
# w 数字 字母 下划线
# s 空白符
# 单词的末尾
# d 数字
# W 除了数字 字母 下划线
# D 除了数字
# S 除了空白符
# ^ 开头
# $ 结尾
# [] 匹配字符组中的字符
# [^] 除了字符组内的元素外
# 量词 限定符
# * {0,n} 零或者更多
# + {1,n} 一或更多
# ? {0,1} 零或一
# {p} p次
# {p,} p次或更多次
# {p,q} 从p到q次
# .* 贪婪匹配 尽可能多的匹配到结果
# .+
# .*? 惰性匹配 是尽可能的少匹配.
# 分组 正则中使⽤()进⾏分组. 如.匹配⼀个相对复杂的⾝份证号
# ^[1-9]d{14}(d{2}[0-9x])?$
# ^([1-9]d{16}[0-9x]|[1-9]d{14})$
# 转义
# 正则表达式中,有很多有特殊意义的是元字符,如
和s等,若要在正则中匹配正常的"
"⽽不是"换⾏符"需要对""进⾏转义, 变成'\'.
# 而在python中,都是字符串的形式出现,字符串中也有特殊的含义,本身还需转义.所以匹配⼀次"
",字符串中要写成'\n',那么正则就要写成"\\n",
# 这样太麻烦.所以这时用r'
'这个概念,此时的正则是r'\n'就可以了.
# 如 r"www.(baidu|google).com","www.google.com"
#
换行
# \n
# .
# /
# ?
# 2. re模块
# findall() 获取到匹配的所有内容
# finditer() 匹配到所有内容。 返回迭代器
# search() 搜索。查到了就返回
# match() 匹配. 从头开始匹配
1 # r"(?P<name>正则)"
2
3 import re
4 res = re.search('e','leiyunse') # 搜索 搜到 一个 结果就返回
5 print(res.group()) # e
6
7 res = re.match('w+','wuwu is not good man') # match 从开头匹配 若匹配到了就返回
8 print(res.group()) # wuwu
9
10 lst = re.findall('w+','wusir and exo') # findall 查找所有 返回list
11 print(lst) # ['wusir', 'and', 'exo']
12
13 it = re.finditer("w+","mai le fo leng") # 返回迭代器
14 for el in it:
15 print(el.group())
16 '''
17 mai
18 le
19 fo
20 leng
21 '''
22
23 # 分组优先级
24 lst = re.findall(r"www.(baidu|google).com","www.google.com") # ()最优先返回
25 print(lst) # ['google']
26
27 # (?:) 去掉优先级
28 lst = re.findall(r"www.(?:baidu|google).com","www.google.com")
29 print(lst) # ['www.google.com']
30
31 # split 切割 若加括号()会保留切的
32 lst = re.split("([ab])","alex is not a sb,no he is a big sb")
33 print(lst)
34
35 # sub 替换
36 res = re.sub(r"d+","_sb_","alex111wusir222taibai666ritian999")
37 print(res) # alex_sb_wusir_sb_taibai_sb_ritian_sb_
38
39 # subn 替换 返回元组 带替换次数
40 res = re.subn(r"d+","_sb_","alex111wusir222taibai666ritian999")
41 print(res)
42
43 # re.compile() # 把正则表达式预加载
44 obj = re.compile(r"alexd+and")
45 res = obj.search("alex222andwusir333taibai666ritian999")
46 print(res.group()) # alex222and
47 # 若数字单独拿出来
48 obj = re.compile(r"alex(?P<name>d+)and")
49 res = obj.search("alex222andwusir333taibai666ritian999")
50 print(res.group()) # alex222and
51 print(res.group("name")) # 222
View Code