# ### 正则表达式 import re """ # 1.正常分组 () 1) 正常情况下用()圆括号进行分组 可以用\1 反向引用第一个圆括号匹配的内容。 2) (?:正则表达式) 表示取消优先显示的功能 (正则表达式) 代表分组 findall 把所有分组的内容显示到列表里 (?:正则表达式) 代表分组 findall 把所有分组的内容不显示到列表里 """ print(re.findall('.*?_good','wusir_good alex_good 神秘男孩_good')) #['wusir_good', ' alex_good', ' 神秘男孩_good'] print(re.findall('(.*?)_good','wusir_good alex_good 神秘男孩_good')) #['wusir', ' alex', ' secret男'] print(re.findall('(?:.*?)_good','wusir_good alex_good 神秘男孩_good')) # | 代表或 # 既想匹配abc 还要匹配abcd lst = re.findall("abc|abcd","abc234abcd234") print(lst) # 有缺陷,不能够都匹配到 #任意 把字符串长的写在前面,字符串短的写在后面 lst = re.findall("abcd|abc","abc234abcd234") print(lst) # 匹配小数 ''' 用\让原本有意义的字符变得无意义. . 代表任意字符(除了\n) 如果想要让正则匹配一个. 用\. 让点的意思失效. ''' # 3.14 34. .2342 234. . 2344.234 lst = re.findall("\d+\.\d+","3.14 34. .2342 234. . 2344.234") print(lst) # 匹配小数和整数 lst = re.findall("\d+\.\d+|\d+","3.14 34. .2342 234. . 2344.234 343 sdfsdf ") print(lst) print("------112221------") # 使用分组的形式来匹配小数和整数 lst = re.findall("\d+(\.\d+)?","3.14 34. .2342 234. . 2344.234 343 sdfsdf ") print(lst) print("------111------") lst = re.findall("\d+(?:\.\d+)?","3.14 34. .2342 234. . 2344.234 343 sdfsdf ") print(lst) # 匹配135或171的手机号 lst = re.findall("135|^171\d{8}","171skdjfksjkf 11312312317178787887") print(lst) print("------------") lst = re.findall("135|171[0-9]{8}","171skdjfksjkf 17178787887") print(lst) # ### search 通过正则匹配出第一个对象返回,通过group取出对象中的值 """ findall 把满足条件的所有值都找出来放到列表里面返回 search 找到一个满足条件的值就直接返回,扔到一个对象当中 想要获取对象中的值,用group 对象.group() """ obj = re.search("\d+","jsdfusudf8989sdfsdf89") print(obj) res = obj.group() print(res) # 匹配www.baidu.com 或者 www.oldboy.com obj = re.search("(www)\.(baidu|oldboy)\.(com)","www.baidu.com www.oldboy.com") res = obj.group() print(res) # 数字1 代表拿第一个小括号里面的内容 res = obj.group(1) print(res) # 数字2 代表拿第一个小括号里面的内容 res = obj.group(2) print(res) # 数字3 代表拿第一个小括号里面的内容 res = obj.group(3) print(res) # groups 一次性把所有小括号里面的内容匹配出来 res = obj.groups() print(res) # "5*6-7/3" 匹配 5*6 或者 7/3 strvar = "5*6-7/3" obj = re.search("\d+[*/]\d+",strvar) res = obj.group() print(res) lst = re.findall("\d+[*/]\d+",strvar) print(lst)