# 二元字符:. ^ $ * + ? { } [ ] | ( ) \
# 模糊匹配
import re
# . 通配符
print(re.findall("w..l","wedfldsafwlll"))
# ['wlll']
# ^ 首字符
print(re.findall("^h....", "heirkdjfkd"))
# ['heirk']
# $ 尾字符
print(re.findall(".c$","sfasjdfhajdhkjhfakjhdhc"))
# ['hc']
# * 重复匹配 默认贪婪匹配 [0, +OO] *表示匹配前一个字符0次或无限次 .* 重复任意字符
print(re.findall("ab*", "djhkbfhakjaabbbbbbfbabababea"))
# ['a', 'a', 'abbbbbb', 'ab', 'ab', 'ab', 'a'] a+ b 0次到+00次
print(re.findall("ab *", "djhkbfhakjaabbbbbbfbabababea"))
# ['ab', 'ab', 'ab', 'ab']
# + [1, +00]
print(re.findall("ab+", "skjdfkabsjabbbgabsa")) # 重复1到无穷个b
# ['ab', 'abbb', 'ab']
# ? [0, 1]
print(re.findall("a?b", "djaakjdbhfakjdhfjkab")) # 0-1个a
# ['b', 'ab']
# {}
print(re.findall("a{5}b", "sdfafdasfazaaaaab")) # a重复5次
# ['aaaaab']
print(re.findall("a{1,}b", "aaababdaaaaaaaaaabafdaaab")) # a重复1到无穷大次
# ['aaab', 'ab', 'aaaaaaaaaab', 'aaab']
# [] 取消元字符的特殊功能 \ ^ - 除外
print(re.findall("[a-z]", "adsf")) # 匹配a-z任一字符
# ['a', 'd', 's', 'f']
print(re.findall("[a,,]", "adfad,sf*dsf"))
# ['a', 'a', ',']
print(re.findall("[a-zA-Z1-9]", "adfa23245289AFDHGSDd,sf*dsf"))
# ^放在[]里,表示取反
print(re.findall("[^4,5]", "dsj4j4k5*kj65343jk")) # ^ 后面的4,5为一组
# ['d', 's', 'j', 'j', 'k', '*', 'k', 'j', '6', '3', '3', 'j', 'k']
# \
# \d 匹配十进制数
# \D 匹配任何非数字字符
# \s 匹配任何空白字符
# \S 匹配非任何空白字符
# \w 匹配任何字母数字字符
# \W 匹配任何非字母数字字符
# \b 匹配一个特殊边界
print(re.findall("\d{11}", "2342345245stsdfsdf34567865432")) # 匹配11个数字
# ['34567865432']
print(re.findall(r"\bi\b", "i am a li&t"))
# ['i']
print(re.search("ad", "adffdweasdasdad").group())
# ad
str_1 = r"adjkladfhiasas\ueyti@ksjdf493572.comadsfadfacomrtwtrw"
print(re.search("a\+", "adadfa+").group()) # a+
print(re.findall(r"\\", "a\c"))
d = re.findall("\\\\", str_1) # re模块中 \特殊字符,需要使用转义字符\
# python 解释器解释, \为特殊字符,需要使用转义字符\进行转义
print(d)
# ['\\']
e = re.search(r"\\", str_1) # r 表示后面的字符为python中的原生字符
print(e)
# <re.Match object; span=(14, 15), match='\\'>
f = re.search(r"\bcom", str_1) # \b在python中指退格
# \b在re模块中指单词的边界,所以使用r
print(f)
# <re.Match object; span=(33, 36), match='com'>
# () 做分组
print(re.search("(as)+", str_1))
# <re.Match object; span=(10, 14), match='asas'>
print(re.search("(as)+", str_1).group()) # 贪婪匹配
# asas
str_2 = "asdfaas3"
print(re.search("(as)|3", "asdd893").group()) # | 或
# as
print(re.search("(as)|3", "afsdd893").group())
# 3
print(re.search("(?P<id>\d{3})/(?P<name>\w{3})", "ieuriwruiw234/yui").group())
# 234/yui
print(re.search("(?P<id>\d{3})/(?P<name>\w{3})", "ieuriwruiw234/yui").group("id"))
# 234
print(re.search("(?P<id>\d{3})/(?P<name>\w{3})", "ieuriwruiw234/yui").group("name"))
# yui
# 正则表达式的方法
str_1 = r"adjkladfhiasas\ueyti@ksjdf493572.comadsfadfacomrtwtrw"
a = re.match("com", str_1).group() # 只在字符串起始位置匹配。 找不到,返回None 匹配一次
# 返回一个对象(object),对象可以调用group()返回结果
print(a)
# None
b = re.search("com", str_1) # re.search匹配整个字符串,直到找到一个匹配,找不到返回None
# 返回一个对象(object),对象可以调用group()返回结果
print(b)
# <re.Match object; span=(33, 36), match='com'>
c = re.findall("com", str_1) # 字符串中找到正则表达式所匹配的所有子串,
# 并返回一个列表,如果没有找到匹配的,则返回空列表
print(c)
# ['com', 'com']
print(re.split("d", "asdfadsfretrytrhdfbd"))
print(re.split("[a,d]", "asdfad")) # 先使用a分,再使用d分
print(re.sub("a..j","m..n","adfjskdhfskjygwiuehfs"))
obj = re.compile("\.com") # 正则表达式
ret = obj.findall('adfadfadf.comfda')
print(ret)
str_1 = r"adjkladfhiasas\ueyti@ksjdf493572.comadsfadfacomrtwtrw"
a = re.match("com", str_1) # 从字符串起始位置匹配。 找不到,返回None 匹配一次
print(a)
# None
b = re.search("com", str_1) # re.search匹配整个字符串,直到找到一个匹配
# 找不到,返回None 匹配一次
print(b)
# <re.Match object; span=(33, 36), match='com'>
c = re.findall("com", str_1) # 字符串中找到正则表达式所匹配的所有子串,
# 并返回一个列表,如果没有找到匹配的,则返回空列表
print(c)
# ['com', 'com']
d = re.findall("\\\\", str_1) # re模块中 \特殊字符,需要使用转义字符\
# python 解释器解释, \为特殊字符,需要使用转义字符\进行转义
print(d)
# ['\\']
e = re.search(r"\\", str_1) # r 表示后面的字符为python中的原生字符
print(e)
# <re.Match object; span=(14, 15), match='\\'>
f = re.search(r"\bcom", str_1) # \b在python中指退格
# \b在re模块中指单词的边界,所以使用r
print(f)
# <re.Match object; span=(33, 36), match='com'>
# () 做分组
print(re.search("(as)+", str_1))
# <re.Match object; span=(10, 14), match='asas'>
print(re.search("(as)+", str_1).group()) # 贪婪匹配
# asas
str_2 = "asdfaas3"
print(re.search("(as)|3", "asdd893").group()) # | 或
# as
print(re.search("(as)|3", "afsdd893").group())
# 3
print(re.search("(?P<id>\d{3})/(?P<name>\w{3})", "ieuriwruiw234/yui").group())
# 234/yui
print(re.search("(?P<id>\d{3})/(?P<name>\w{3})", "ieuriwruiw234/yui").group("id"))
# 234
print(re.search("(?P<id>\d{3})/(?P<name>\w{3})", "ieuriwruiw234/yui").group("name"))
# yui