#-*- coding:utf-8 -*-
#Author:Hy
#@Time :2018/4/1420:47
import re
# . 通配符
print(re.findall(".txt", "helelloasdsaghdsgaldgxa.txtbtxtctxt"))
# ^ 只在开头匹配
print(re.findall("^Hello", "Hellohisdghaidhasid"))
# $ 只在结尾匹配
print(re.findall("id$", "helolokdasjdashjduahduhid"))
# {X,Y}重复指定次数
print(re.findall("a{2,4}", "abaabaaabaaaabaaaaabaaaaaaabaaaaaaaab"))
# ? 重复0或者1次
print(re.findall("a?","abcdefagasjdhad"))
# * 重复0到无穷次
print(re.findall("a*", "abaabaaabaaaabaaaaabaaaaaaabaaaaaaaab"))
# + 重复1到无穷次
print(re.findall("a+", "abaabaaabaaaabaaaaabaaaaaaabaaaaaaaab"))
# 在后部加上?则是懒匹配
print(re.findall("a+?", "abaabaaabaaaabaaaaabaaaaaaabaaaaaaaab"))
# \ 转义字符 可以吧元字符变为普通字符
print(re.findall("a\+b", "a+ba+c+a+da+b"))
# \ 转义字符 \d数字 \D非数字 \w 字母 \W 非字母 \s 空白符 \S非空白符
# \b 后边是特殊字符的
print(re.findall(r"a\b", "a*a@a$accda ad a"))
# [] 或 它是[]内部的每个字符和前边整体进行匹配 其内默认所有字符都是普通字符
print(re.findall("ab[cd]", "ab abc abd abcd axxx asasda"))
# | 或 它是以|分割的每一个都是单独整体进行匹配
print(re.findall("ab|cd|ef|gh", "aaaab abcdeffghdfgdasdbashdbh"))
#() 分组 它是用来把匹配出来的字符进行分组的
#re.search 只匹配第一个,返回值是一个对象 标注了匹配内容的位置和内容本身 .group是显示匹配的内容
print(re.search(r"(?P<name>[a-z]+)(?P<age>[0-9]+)", "wdn22why11ydb23hyn77").group())
print(re.findall("(\d+)(\w+)(\s+)", "123hashdh asduh2771233 123jasd h137bnasd u123y 2hj"))
#re.match 同上 不过只匹配开头
print(re.match("hello","helloaduashduhasduiha").group())
#re.split 指定以某种方式切割字符串 如下表示的是以空格和|切割 被切掉的就没了
#如果切割的内容左边或者右边没有 切出来的有空串
print(re.split("[ |]","a b c de fg asd eb asd|asdasaf "))
#re.sub 替换字符串 可以指定匹配次数 如果是负数和0 则无意义。。。
print(re.sub("a", "b", "aaaaaaaaaaaaaaaa", 3))
#re.subn 返回值是一个元组 返回替换的结果同时返回替换的次数
print(re.subn("a", "b", "aaaaaaaaaaaaaaaa", 3))
#re.compile 返回已经制定好的匹配规则
com = re.compile("\d+")
print(com.findall("SD3HA4SU6K78DH"))
#re.findter 返回的是一个迭代器
ret = re.finditer("ab|cd|ef|gh", "aaaab abcdeffghdfgdasdbashdbh")
for date in ret:
print(date.group())
#在findall中 默认优先把分组中的内容显示出来 但匹配内容是完整的
print(re.findall("www\.(qq|163|sin)\.com", "asdg www.baidu.com www.hao123.com www.qq.com www.sin.com www.163.com"))
#在优先级的元字符后面加上?:可以去掉优先级
print(re.findall("www\.(?:qq|163|sin)\.com", "asdg www.baidu.com www.hao123.com www.qq.com www.sin.com www.163.com"))