通配符 : .
叫通配符、万能通配符,匹配1个除了换行符\n以外的任意原子符号
字符集:[] : 只能匹配一个
例如 [a-z]匹配a到z中任何一个
python"># 通配符 .
data = "a 12 32 你好 221 a fbd facdsd c231 dda 测试 f d"
# 匹配以f开头,以d结尾的字符串
res = re.findall("f.d", data)
print(res) # ['fbd', 'f d']
res = re.findall("f..d", data)
print(res) # ['facd']
重复元字符: * + ? {}
{} :匹配指定次数
{} 中间填写重复的数量
? 有2个功能 1:取消贪婪匹配 2:匹配0-1次
PS:默认贪婪匹配:当我们的筛选条件存在多个匹配量的时候,以最大的匹配量进行显示* 重复0-无穷次
+ 重复1-无穷次
python"># 重复元字符 :* + ? {}
data = "a fdf 你好 221 a fbd facdsd c231 dda 测试 f d"
# 匹配数字
res1 = re.findall("\d", data)
print(res1) # ['1', '2', '3', '2', '2', '2', '1', '2', '3', '1']
# 若不用重复的,则会将数据中数字匹配一位拿出
# {} 中间填写重复的数量
res2 = re.findall("\d{2}", data)
print(res2) # ['12', '32', '22', '23']
# 匹配以f开头,以d结尾的字符串
# fd中并不明确几个字符
# 1,3表示最少匹配1次,最多匹配3次
res3 = re.findall("f.{1,3}d", data)
print(res3) # ['fbd', 'facd', 'f d']
# 匹配以f开头,以d结尾的字符串
# * 重复0-无穷次、
# 贪婪匹配
res4 = re.findall("f.*d", data)
print(res4) # ['fdf 你好 221 a fbd facdsd c231 dda 测试 f d']
# ? 取消贪婪匹配
res5 = re.findall("f.*?d", data)
print(res5) # ['fd', 'f 你好 221 a fbd', 'facd', 'f d']
# + 匹配1 - 无穷次
res6 = re.findall("f.+?d", data)
print(res6) # ['fdf 你好 221 a fbd', 'facd', 'f d']
# ? 俩个功能 : 1 重复0-1次 2 取消贪婪匹配
res7 = re.findall("f.?d", data)
print(res7) # ['fd', 'fbd', 'f d']
^ 1:叫做开始边界,匹配一行开头的位置 2:放在一个特定字符中会代表取反 例如:[^a-z] 代表取除了a-z之外的 $ 叫做结束边界,匹配一行结尾的位置
python">path = "/ccc/2022/12"
# 匹配出年月,并且开头是/ccc/,并且结尾是月份
reg = "^/ccc/[0-9]{4}/[0-9]{1,2}$"
res = re.findall(reg, path)
print(res) # ['/ccc/2022/12']
转义符 \
python">s = "hello world 23 w q233 wew 21324 wqqw 322 app1wa"
# 匹配数字
# res = re.findall("\\d+", s)
res = re.findall(r"\d+", s)
print(res) # ['23', '233', '21324', '322', '1']
# 匹配字母数字下划线
res1 = re.findall(r"\w+", s)
print(res1) # ['hello', 'world', '23', 'w', 'q233', 'wew', '21324', 'wqqw', '322', 'app1wa']
# \b 匹配单词边界
a = "The cat sat on the caterpillar. i love cat!"
# 匹配单词cat
ret = re.findall(r"cat", a)
print(ret) # ['cat', 'cat', 'cat']
ret1 = re.findall(r"\bcat\b", a)
print(ret1) # ['cat', 'cat']
取消特殊功能符号以普通化
python"># 取消符号特殊化,以普通化
c = "https://www.baidu.com/,https://wwwwwwcos.baidu.com/"
ret2 = re.findall(r"https?://www\.[a-z]*?\.com/", c)
print(ret2) # ['https://www.baidu.com/']
() 分组与优先提取
| 或
?: 在括号前加?: 不会提取括号中的内容
python"># ()分组与优先提取
a = "apple banana peach orange aaa appleappleapple appleapple"
# 找出2个以上连续apple在一起的字符串
ret = re.findall(r"(?:apple){2,3}", a)
print(ret) # ['appleappleapple', 'appleapple']
# | 或
# 匹配单个apple或者banana
ret1 = re.findall(r"\bapple\b|\bbanana\b", a)
print(ret1) # ['apple', 'banana']
ret2 = re.findall(r"\b(?:apple|banana)\b", a)
print(ret2) # ['apple', 'banana']
# ?: 在括号前加?: 不会提取括号中的内容
python中re模块的常用函数
python">"""
re.match(pattern, string, flags=0) :从字符串的起始位置匹配
re.search(pattern, string, flags=0) :从字符串的任意位置匹配
re.findall(pattern, string, flags=0) :返回所有匹配项的列表
re.split(pattern, string, maxsplit=0, flags=0) :按照正则表达式匹配的分隔符,将字符串分割成列表
re.sub(pattern, repl, string, count=0, flags=0) :替换字符串
re.subn(pattern, repl, string, count=0, flags=0) :替换字符串
re.compile(pattern, flags=0) :编译正则表达式,返回一个正则表达式对象
"""
"""
re.search返回一个match对象
对象.group() :返回匹配项的字符串
对象.start() :返回匹配项的开始位置
对象.end() :返回匹配项的结束位置
"""
# 有名分组
"""
在正则表达式中,使用()括起来的部分,会被命名为一个组。
在匹配时,这些组会被提取出来,以供后续使用。(?P<outer ip> 规则) 分组名字为outer ip名字
通过re.search返回一个match对象
对象.group(outer ip(所起的分组名)) :返回匹配项的字符串
"""
# match
"""
re.match(pattern, string, flags=0) :从字符串的起始位置匹配"""# re.compile
"""
re.compile(pattern, flags=0) :编译正则表达式,返回一个正则表达式对象
写法:
# 规则对象
obj = re.compile(r"(?P<outer ip>[0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3})")
# 规则对象.re方法
obj.search("outer ip: 192.168.1.1")高效率
"""