正则-- | 匹配分组

时间:2022-04-08 14:01:11
# ### 正则表达式
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)