import re
print("*"*20)
#re.match 在字符串开头进行匹配
pattern = "(\d+)(@)"
string = "123456@qq.com"
result = re.match(pattern,string)
print(result.group())#匹配整个group,所有的匹配项 123456@
print(result.group(0))#和上面的是一样的,匹配整个group 123456@
print(result.group(1)) # 123456
print(result.group(2)) # @
print(result.groups()) # ('123456', '@') 返回一个元组, 元组里面是所有匹配的分组
print(result.groups()[0])
print(result.groups()[1])
"""
group()用来提出"分组"截获的"字符串",()用来分组;
groups()"匹配对象"的方法,一次性获取所有的分组,返回类型为元组。
"""
print("*"*20)
#groups 对于没有匹配到的分组返回来的是None
pattern = "(\d+)|(@)"
string = "123456@qq.com"
result = re.match(pattern,string)
print(result.groups()) #('123456', None)
print(result.groups()[0]) #123456
print(result.groups()[1]) #None
print("*"*20)
print("注意group 与groups的区别, 可以看这个例子")
pattern = "\d+"
string = "123456@qq.com"
result = re.match(pattern,string)
print(result.group()) #123456
print(result.groups())#() 没有设置分组, groups返回的就是空的元组()
print("*"*20)
pattern = "(\d+)"
string = "123456@qq.com"
result = re.match(pattern,string)
print(result.group()) #123456
print(result.groups()) # 设置分组, groups返回的就是('123456',)
print("*"*20)
#search 查找任意位置的匹配
string = "qq.com"
mo = re.compile(r"(\d+)|(@)")
mo2 = mo.search(string)
print("mo2",mo2) # 没有匹配上返回None
#re.sub 返回的是被替换之后的字符串
strings = "hello ,world,HI , world"
pattern = ","
result1 = re.sub(pattern, "。", strings)
print(re.sub(pattern, "。", strings)) # hello 。world。HI 。 world
print(result1) #hello 。world。HI 。 world
#re.subn 返回的是一个数组
result2 = re.subn(pattern, "。", strings)
print(re.subn(pattern, "。", strings)) #('hello 。world。HI 。 world', 3) 3表示替换的次数
print(result2)#('hello 。world。HI 。 world', 3)
print("*"*20)
#编译正则表达式
print("编译正则表达式")
string2 = "123456@qq.com"
rePattern = re.compile(r"\d+")
mo = rePattern.search(string2)
if mo is not None:
print("mo is not Nono , match")
print(mo.group()) # 123456
print(mo.groups()) #()
else:
print("can not match")
"""
findall: 从字符串任意位置查找,返回一个列表
finditer:从字符串任意位置查找,返回一个迭代器
"""
print("*"*20)
pattern3 = "\d+"
string4 = "123%456$789"
print(re.findall(pattern3, string4)) #返回一个列表 ['123', '456', '789']
print(re.finditer(pattern3, string4))# 返回一个迭代器 <callable_iterator object at 0x7fcbcbfde350>
finditerIter = re.finditer(pattern3,string4)
for i in finditerIter:
print(i)
#使用re.splitl 分割字符串re.split(pattern, string, maxsplit=0, flags=0)
text= "shunA1shunB2 shun shun3C"
pattern = r"\d+|\s+\|\d+\s+"
print(re.split(pattern,text))