python  -------re模块
正则表达式正则表达式本身是一种小型的、高度专业化的编程语言而在python中通过内嵌集成re模块程序员们可以直接调用来实现正则匹配。正则表达式模式被编译成一系列的字节码然后由用C编写的匹配引擎执行。正则表达式是用来匹配处理字符串的 python 中使用正则表达式需要引入re模块如import re #第一步要引入re模块a re.findall(“匹配规则”, “要匹配的字符串”) #第二步调用模块函数以列表形式返回匹配到的字符串如#!/usr/bin/env python # -*- coding:utf-8 -*- import re #第一步要引入re模块 a re.findall(匹配规则, 这个字符串是否有匹配规则的字符) #第二步调用模块函数 print(a) #以列表形式返回匹配到的字符串 #打印出 [匹配规则]^ 元字符:字符串开始位置与匹配规则符合就匹配否则不匹配匹配字符串开头。在多行模式中匹配每一行的开头(ps: ^ 元字符如果写到[]字符集里就是反取)#!/usr/bin/env python # -*- coding:utf-8 -*- import re #第一步要引入re模块 a re.findall(^匹配规则, 匹配规则这个字符串是否匹配) #字符串开始位置与匹配规则符合就匹配否则不匹配 print(a) #以列表形式返回匹配到的字符串 #打印出 [匹配规则]反取举例#!/usr/bin/env python # -*- coding:utf-8 -*- import re #第一步要引入re模块 a re.findall([^a-z], 匹配s规则这s个字符串是否s匹配f规则则re则则则) #反取匹配出除字母外的字符 print(a) #以列表形式返回匹配到的字符串 #打印出 [匹, 配, 规, 则, 这, 个, 字, 符, 串, 是, 否, 匹, 配, 规, 则, 则, 则, 则, 则]$ 元字符:字符串结束位置与匹配规则符合就匹配否则不匹配匹配字符串末尾在多行模式中匹配每一行的末尾#!/usr/bin/env python # -*- coding:utf-8 -*- import re #第一步要引入re模块 a re.findall(匹配规则$, 这个字符串是否匹配规则) #字符串结束位置与匹配规则符合就匹配否则不匹配 print(a) #以列表形式返回匹配到的字符串 #打印出 [匹配规则]元字符:需要字符串里完全符合匹配规则就匹配规则里的元字符前面的一个字符可以是0个或多个原本字符匹配前一个字符0或多次贪婪匹配前导字符有多少个就匹配多少个很贪婪如果规则里只有一个分组尽量避免用*否则会有可能匹配出空字符串#!/usr/bin/env python-- coding:utf-8 --import re #第一步要引入re模块 a re.findall(匹配规则*, 这个字符串是否匹配规则则则则则) #需要字符串里完全符合匹配规则就匹配规则里的*元字符前面的一个字符可以是0或多个原本字符 print(a) #以列表形式返回匹配到的字符串 #打印出 [匹配规则则则则则]元字符:需要字符串里完全符合匹配规则就匹配规则里的元字符前面的一个字符可以是1个或多个原本字符匹配前一个字符1次或无限次贪婪匹配前导字符有多少个就匹配多少个很贪婪#!/usr/bin/env python# -*- coding:gbk -*- import re #第一步要引入re模块 a re.findall(匹配, 匹配配配配配规则这个字符串是否匹配规则则则则则) #需要字符串里完全符合匹配规则就匹配规则里的元字符前面的一个字符可以是1个或多个原本字符 print(a) #以列表形式返回匹配到的字符串 #打印出 [匹配配配配配, 匹配]? 元字符和防止贪婪匹配:需要字符串里完全符合匹配规则就匹配规则里的?元字符前面的一个字符可以是0个或1个原本字符匹配一个字符0次或1次还有一个功能是可以防止贪婪匹配详情见防贪婪匹配#!/usr/bin/env python # -*- coding:utf-8 -*- import re #第一步要引入re模块 a re.findall(匹配规则?, 匹配规这个字符串是否匹配规则则则则则) #需要字符串里完全符合匹配规则就匹配规则里的?元字符前面的一个字符可以是0个或1个原本字符 print(a) #以列表形式返回匹配到的字符串 #打印出 [匹配规, 匹配规则]{} 元字符,范围:需要字符串里完全符合匹配规则就匹配规则里的 {} 元字符前面的一个字符是自定义字符数位数的原本字符{m}匹配前一个字符m次{m,n}匹配前一个字符m至n次若省略n则匹配m至无限次{0,}匹配前一个字符0或多次,等同于*元字符{,}匹配前一个字符1次或无限次,等同于元字符{0,1}匹配前一个字符0次或1次,等同于?元字符#!/usr/bin/env python # -*- coding:utf-8 -*- import re #第一步要引入re模块 a re.findall(匹配规则{3}, 匹配规这个字符串是否匹配规则则则则则) #{m}匹配前一个字符m次{m,n}匹配前一个字符m至n次若省略n则匹配m至无限次 print(a) #以列表形式返回匹配到的字符串 #打印出 [匹配规则则则][] 元字符,字符集:需要字符串里完全符合匹配规则就匹配规则里的 [] 元字符对应位置是[]里的任意一个字符就匹配字符集。对应的位置可以是字符集中任意字符。字符集中的字符可以逐个列出也可以给出范围如[abc]或[a-c]。[^abc]表示取反即非abc。所有特殊字符在字符集中都失去其原有的特殊含义。用\反斜杠转义恢复特殊字符的特殊含义。#!/usr/bin/env python # -*- coding:utf-8 -*- import re #第一步要引入re模块 a re.findall(匹配[a,b,c]规则, 匹配a规则这个字符串是否匹配b规则则则则则) #需要字符串里完全符合匹配规则就匹配规则里的 [] 元字符对应位置是[]里的任意一个字符就匹配 print(a) #以列表形式返回匹配到的字符串 [^]非反取匹配出除[^]里面的字符^元字符如果写到字符集里就是反取 a re.findall([^a-z], 匹配s规则这s个字符串是否s匹配f规则则re则则则) #反取匹配出除字母外的字符 print(a) #以列表形式返回匹配到的字符串 #打印出 [匹, 配, 规, 则, 这, 个, 字, 符, 串, 是, 否, 匹, 配, 规, 则, 则, 则, 则, 则]反斜杠后边跟普通字符实现特殊功能即预定义字符预定义字符是在字符集和组里都是有用的\d匹配任何十进制数它相当于类[0-9]#!/usr/bin/env python# -*- coding:utf-8 -*- import re #第一步要引入re模块 a re.findall(\d, 匹配规则这2个字符串3是否匹配规则5则则则7则) #\d匹配任何十进制数它相当于类[0-9] print(a) #以列表形式返回匹配到的字符串 #打印出 [2, 3, 5, 7]\d如果需要匹配一位或者多位数的数字时用#!/usr/bin/env python # -*- coding:gbk -*- import re #第一步要引入re模块 a re.findall(\d, 匹配规则这2个字符串134444是否匹配规则5则则则7则) #\d如果需要匹配一位或者多位数的数字时用 print(a) #以列表形式返回匹配到的字符串 #打印出 [2, 134444, 5, 7]\D 匹配任何非数字字符它相当于类[^0-9]#!/usr/bin/env python # -*- coding:utf-8 -*- import re #第一步要引入re模块 a re.findall(\D, 匹配规则这2个字符串3是否匹配规则5则则则7则) #\D匹配任何非数字字符它相当于类[^0-9] print(a) #以列表形式返回匹配到的字符串 #打印出 [匹, 配, 规, 则, 这, 个, 字, 符, 串, 是, 否, 匹, 配, 规, 则, 则, 则, 则, 则]\s 匹配任何空白字符它相当于类[\t\n\r\f\v]#!/usr/bin/env python # -*- coding:utf-8 -*- import re #第一步要引入re模块 a re.findall(\s, 匹配规则 这2个字符串3是否匹\n配规则5则则则7则) #\s匹配任何空白字符它相当于类[\t\n\r\f\v] print(a) #以列表形式返回匹配到的字符串 #打印出[ , , , \n]\S 匹配任何非空白字符它相当于类[^\t\n\r\f\v]#!/usr/bin/env python # -*- coding:utf-8 -*- import re #第一步要引入re模块 a re.findall(\S, 匹配规则 这2个字符串3是否匹\n配规则5则则则7则) #\S匹配任何非空白字符它相当于类[^\t\n\r\f\v] print(a) #以列表形式返回匹配到的字符串 #打印出 [匹, 配, 规, 则, 这, 2, 个, 字, 符, 串, 3, 是, 否, 匹, 配, 规, 则, 5, 则, 则, 则, 7, 则]\w 匹配包括下划线在内任何字母数字字符它相当于类[a-zA-Z0-9_]#!/usr/bin/env python # -*- coding:utf8 -*- import re #第一步要引入re模块 a re.findall(\w,https://www.cnblogs.com/) #\w匹配包括下划线在内任何字母数字字符它相当于类[a-zA-Z0-9_] print(a) #以列表形式返回匹配到的字符串 #打印出 [h, t, t, p, s, w, w, w, c, n, b, l, o, g, s, c, o, m]\W匹配非任何字母数字字符包括下划线在内它相当于类[^a-zA-Z0-9_]import re #第一步要引入re模块 a re.findall(\W,https://www.cnblogs.com/) #\w匹配包括下划线在内任何字母数字字符它相当于类[a-zA-Z0-9_] print(a) #以列表形式返回匹配到的字符串 #打印出[:, /, /, ., ., /]()元字符分组也就是分组匹配()里面的为一个组也可以理解成一个整体如果()后面跟的是特殊元字符如 (adc)* 那么*控制的前导字符就是()里的整体内容不再是前导一个字符#!/usr/bin/env python # -*- coding:utf8 -*- import re #第一步要引入re模块 #也就是分组匹配()里面的为一个组也可以理解成一个整体 a re.search((a4), a4a4a4a4a4dg4g654gb) #匹配一个或多个a4 b a.group() print(b) #打印出 a4a4a4a4a4 #!/usr/bin/env python # -*- coding:utf8 -*- import re #第一步要引入re模块 #也就是分组匹配()里面的为一个组也可以理解成一个整体 a re.search(a(\d), a466666664a4a4a4dg4g654gb) #匹配 (a) (\d0-9的数字) (可以是1个到多个0-9的数字) b a.group() print(b) #打印出 a466666664|元字符或|或或就是前后其中一个符合就匹配#!/usr/bin/env python # -*- coding:utf8 -*- import re #第一步要引入re模块 a re.findall(r你|好, a4a4a你4aabc4a4dgg好dg4g654g) #|或或就是前后其中一个符合就匹配 print(a) #打印出 [你, 好]r原生字符将在python里有特殊意义的字符如\b转换成原生字符就是去除它在python的特殊意义不然会给正则表达式有冲突为了避免这种冲突可以在规则前加原始字符rre模块中常用功能函数正则表达式有两种书写方式一种是直接在函数里书写规则#!/usr/bin/env python # -*- coding:utf-8 -*- import re #第一步要引入re模块 a re.findall(匹配规则, 这个字符串是否有匹配规则的字符) #第二步调用模块函数 print(a) #以列表形式返回匹配到的字符串 #打印出 [匹配规则]match()函数以后常用match从头匹配一个符合规则的字符串从起始位置开始匹配匹配成功返回一个对象未匹配成功返回Nonematch(pattern, string, flags0)#pattern 正则模型#string 要匹配的字符串#falgs 匹配模式注意match()函数 与 search()函数基本是一样的功能不一样的就是match()匹配字符串开始位置的一个符合规则的字符串search()是在字符串全局匹配第一个合规则的字符串#!/usr/bin/env python # -*- coding:utf8 -*- import re #无分组 origin hello egon bcd egon lge egon acd 19 r re.match(h\w, origin) #match从起始位置开始匹配匹配成功返回一个对象未匹配成功返回None print(r.group()) # 获取匹配到的所有结果不管有没有分组将匹配到的全部拿出来 print(r.groups()) # 获取模型中匹配到的分组结果只拿出匹配到的字符串中分组部分的结果 print(r.groupdict()) # 获取模型中匹配到的分组结果只拿出匹配到的字符串中分组部分定义了key的组结果 #输出结果 # hello 匹配到的全部拿出来 # () 没有分组所以为空 # {} 没分组部分定义了key的组所以为空 # 有分组 # 为何要有分组提取匹配成功的指定内容先匹配成功全部正则再匹配成功的局部内容提取出来 r re.match(h(\w), origin) #match从起始位置开始匹配匹配成功返回一个对象未匹配成功返回None print(r.group()) # 获取匹配到的所有结果不管有没有分组将匹配到的全部拿出来 print(r.groups()) # 获取模型中匹配到的分组结果只拿出匹配到的字符串中分组部分的结果 print(r.groupdict()) # 获取模型中匹配到的分组结果只拿出匹配到的字符串中分组部分定义了key的组结果 #输出结果 # hello 匹配到的全部拿出来 # (ello,) 有分组在匹配到的字符串中拿出分组的部分 # {} 没分组部分定义了key的组所以为空 # 有两个分组定义了key # 为何要有分组提取匹配成功的指定内容先匹配成功全部正则再匹配成功的局部内容提取出来 r re.match((?Pn1h)(?Pn2\w), origin) #?P定义组里匹配内容的key(键)里面写key名称值就是匹配到的内容 print(r.group()) # 获取匹配到的所有结果不管有没有分组将匹配到的全部拿出来 print(r.groups()) # 获取模型中匹配到的分组结果只拿出匹配到的字符串中分组部分的结果 print(r.groupdict()) # 获取模型中匹配到的分组结果只拿出匹配到的字符串中分组部分定义了key的组结果 #输出结果 # hello 匹配到的全部拿出来 # (h, ello) 有分组在匹配到的字符串中拿出分组的部分 # {n1: h, n2: ello} 有定义了key的组所以将定义了key的组里的内容以字典形式拿出来search()函数search,浏览全部字符串匹配第一符合规则的字符串浏览整个字符串去匹配第一个未匹配成功返回Nonesearch(pattern, string, flags0)#pattern 正则模型#string 要匹配的字符串#falgs 匹配模式注意match()函数 与 search()函数基本是一样的功能不一样的就是match()匹配字符串开始位置的一个符合规则的字符串search()是在字符串全局匹配第一个合规则的字符串#!/usr/bin/env python # -*- coding:utf8 -*- import re #无分组 origin hello alex bcd alex lge alex acd 19 r re.search(a\w, origin) #search浏览全部字符串匹配第一符合规则的字符串浏览整个字符串去匹配第一个未匹配成功返回None print(r.group()) # 获取匹配到的所有结果不管有没有分组将匹配到的全部拿出来 print(r.groups()) # 获取模型中匹配到的分组结果只拿出匹配到的字符串中分组部分的结果 print(r.groupdict()) # 获取模型中匹配到的分组结果只拿出匹配到的字符串中分组部分定义了key的组结果 #输出结果 # alex 匹配到的全部拿出来 # () 没有分组所以为空 # {} 没分组部分定义了key的组所以为空 # 有分组 # 为何要有分组提取匹配成功的指定内容先匹配成功全部正则再匹配成功的局部内容提取出来 r re.search(a(\w).*(\d), origin) print(r.group()) # 获取匹配到的所有结果不管有没有分组将匹配到的全部拿出来 print(r.groups()) # 获取模型中匹配到的分组结果只拿出匹配到的字符串中分组部分的结果 print(r.groupdict()) # 获取模型中匹配到的分组结果只拿出匹配到的字符串中分组部分定义了key的组结果 #输出结果 # alex bcd alex lge alex acd 19 匹配到的全部拿出来 # (lex, 9) 有分组在匹配到的字符串中拿出分组的部分 # {} 没分组部分定义了key的组所以为空 # 有两个分组定义了key # 为何要有分组提取匹配成功的指定内容先匹配成功全部正则再匹配成功的局部内容提取出来 r re.search(a(?Pn1\w).*(?Pn2\d), origin) #?P定义组里匹配内容的key(键)里面写key名称值就是匹配到的内容 print(r.group()) # 获取匹配到的所有结果不管有没有分组将匹配到的全部拿出来 print(r.groups()) # 获取模型中匹配到的分组结果只拿出匹配到的字符串中分组部分的结果 print(r.groupdict()) # 获取模型中匹配到的分组结果只拿出匹配到的字符串中分组部分定义了key的组结果 #输出结果 # alex bcd alex lge alex acd 19 匹配到的全部拿出来 # (lex, 9) 有分组在匹配到的字符串中拿出分组的部分 # {n1: lex, n2: 9} 有定义了key的组所以将定义了key的组里的内容以字典形式拿出来findall()函数以后常用findall(pattern, string, flags0)#pattern 正则模型#string 要匹配的字符串#falgs 匹配模式浏览全部字符串匹配所有合规则的字符串匹配到的字符串放到一个列表中未匹配成功返回空列表注意一旦匹配成再次匹配是从前一次匹配成功的后面一位开始的也可以理解为匹配成功的字符串不在参与下次匹配#!/usr/bin/env python # -*- coding:utf8 -*- import re #无分组 r re.findall(\d\w\d, a2b3c4d5) #浏览全部字符串匹配所有合规则的字符串匹配到的字符串放到一个列表中 print(r) #输出结果 #[2b3, 4d5] #注意匹配成功的字符串不在参与下次匹配,所以3c4也符合规则但是没匹配到注意如果没写匹配规则也就是空规则返回的是一个比原始字符串多一位的空字符串列表#!/usr/bin/env python # -*- coding:utf8 -*- import re #无分组 r re.findall(, a2b3c4d5) #浏览全部字符串匹配所有合规则的字符串匹配到的字符串放到一个列表中 print(r) #输出结果 #[, , , , , , , , ] #注意如果没写匹配规则也就是空规则返回的是一个比原始字符串多一位的空字符串列表 复制代码注意正则匹配到空字符的情况如果规则里只有一个组而组后面是就表示组里的内容可以是0个或者多过这样组里就有了两个意思一个意思是匹配组里的内容二个意思是匹配组里0内容即是空白所以尽量避免用否则会有可能匹配出空字符串注意正则只拿组里最后一位如果规则里只有一个组匹配到的字符串里在拿组内容是拿的是匹配到的内容最后一位#!/usr/bin/env python # -*- coding:utf8 -*- import re origin hello alex bcd alex lge alex acd 19 r re.findall((a)*, origin) print(r) #输出结果 [, , , , , , a, , , , , , , , , a, , , , , , , , , a, , , , , a, , , , , , ]无分组匹配所有合规则的字符串匹配到的字符串放到一个列表中#!/usr/bin/env python # -*- coding:utf8 -*- import re #无分组 origin hello alex bcd alex lge alex acd 19 r re.findall(a\w, origin) #浏览全部字符串匹配所有合规则的字符串匹配到的字符串放到一个列表中 print(r) #输出结果 #[alex, alex, alex, acd] #匹配所有合规则的字符串匹配到的字符串放到一个列表中 复制代码有分组只将匹配到的字符串里组的部分放到列表里返回相当于groups()方法#!/usr/bin/env python # -*- coding:utf8 -*- import re origin hello alex bcd alex lge alex acd 19 r re.findall(a(\w), origin) #有分组只将匹配到的字符串里组的部分放到列表里返回 print(r) #输出结果 #[lex, lex, lex, cd]多个分组只将匹配到的字符串里组的部分放到一个元组中最后将所有元组放到一个列表里返相当于在group()结果里再将组的部分分别拿出来放入一个元组最后将所有元组放入一个列表返回#!/usr/bin/env python # -*- coding:utf8 -*- import re origin hello alex bcd alex lge alex acd 19 r re.findall((a)(\w), origin) #多个分组只将匹配到的字符串里组的部分放到一个元组中最后将所有元组放到一个列表里返回 print(r) #输出结果 #[(a, lex), (a, lex), (a, lex), (a, cd)]分组中有分组只将匹配到的字符串里组的部分放到一个元组中先将包含有组的组看作一个整体也就是一个组把这个整体组放入一个元组里然后在把组里的组放入一个元组最后将所有组放入一个列表返回#!/usr/bin/env python # -*- coding:utf8 -*- import re origin hello alex bcd alex lge alex acd 19 r re.findall((a)(\w(e)), origin) #分组中有分组只将匹配到的字符串里组的部分放到一个元组中先将包含有组的组看作一个整体也就是一个组把这个整体组放入一个元组里然后在把组里的组放入一个元组最后将所有组放入一个列表返回 print(r) #输出结果 #[(a, le, e), (a, le, e), (a, le, e)]?:在有分组的情况下findall()函数不只拿分组里的字符串拿所有匹配到的字符串注意?:只用于不是返回正则对象的函数如findall()#!/usr/bin/env python # -*- coding:utf8 -*- import re origin hello alex bcd alex lge alex acd 19 b re.findall(a(?:\w),origin) #?:在有分组的情况下不只拿分组里的字符串拿所有匹配到的字符串注意?:只用于不是返回正则对象的函数如findall() print(b) #输出 # [alex, alex, alex, acd]split()函数根据正则匹配分割字符串返回分割后的一个列表split(pattern, string, maxsplit0, flags0)#pattern 正则模型#string 要匹配的字符串#maxsplit指定分割个数#flags 匹配模式按照一个字符将全部字符串进行分割#!/usr/bin/env python # -*- coding:utf8 -*- import re origin hello alex bcd alex lge alex acd 19 r re.split(a, origin) #根据正则匹配分割字符串 print(r) #输出结果 [hello , lex bcd , lex lge , lex , cd 19] #根据a进行分组将匹配到的字符串作为分割标准进行分割#!/usr/bin/env python # -*- coding:utf8 -*- import re origin hello alex bcd alex lge alex 2acd 19 r re.split(a\w, origin) #根据正则匹配分割字符串 print(r) #输出结果 [hello , bcd , lge , 2, 19] #将匹配到的字符串作为分割标准进行分割 复制代码sub()函数替换匹配成功的指定位置字符串sub(pattern, repl, string, count0, flags0)#pattern 正则模型#repl 要替换的字符串#string 要匹配的字符串#count 指定匹配个数#flags 匹配模式#!/usr/bin/env python # -*- coding:utf8 -*- import re origin hello alex bcd alex lge alex acd 19 r re.sub(a,替换,origin) #替换匹配成功的指定位置字符串 print(r) #输出 # hello 替换lex bcd 替换lex lge 替换lex 替换cd 19subn()函数替换匹配成功的指定位置字符串,并且返回替换次数可以用两个变量分别接受subn(pattern, repl, string, count0, flags0)#pattern 正则模型#repl 要替换的字符串#string 要匹配的字符串#count 指定匹配个数#flags 匹配模式#!/usr/bin/env python # -*- coding:utf8 -*- import re origin hello alex bcd alex lge alex acd 19 a,b re.subn(a,替换,origin) #替换匹配成功的指定位置字符串,并且返回替换次数可以用两个变量分别接受 print(a) print(b) #输出 # hello 替换lex bcd 替换lex lge 替换lex 替换cd 19 # 4常用. 默认匹配除\n之外的任意一个字符若指定flag DOTALL,则匹配任意字符包括换行 ^ 匹配字符开头若指定flags MULTILINE,这种也可以匹配上(r^a,\nabc\neee,flagsre.MULTILINE) $ 匹配字符结尾或e.search(foo$,bfoo\nsdfsf,flagsre.MULTILINE).group()也可以 * 匹配*号前的字符0次或多次re.findall(ab*,cabb3abcbbac) 结果为[abb, ab, a] 匹配前一个字符1次或多次re.findall(ab,abcdabbbba) 结果[ab, abb] ? 匹配前一个字符1次或0次 {m} 匹配前一个字符m次 {n,m} 匹配前一个字符n到m次re.findall(ab{1,3},abb abc abbcbbb) 结果abb, ab, abb] | 匹配|左或|右的字符re.search(abc|ABC,ABCBabcCD).group() 结果ABC (...) 分组匹配re.search((abc){2}a(123|456)c, abcabca456c).group() 结果 abcabca456c \A 只从字符开头匹配re.search(\Aabc,alexabc) 是匹配不到的 \Z 匹配字符结尾同$ \d 匹配数字0-9 \D 匹配非数字 \w 匹配[A-Za-z0-9] \W 匹配非[A-Za-z0-9] s 匹配空白字符、\t、\n、\r , re.search(\s,ab\tc1\n3).group() 结果 \t (?Pname...) 分组匹配 re.search((?Pprovince[0-9]{4})(?Pcity[0-9]{2})(?Pbirthday[0-9]{4}),371481199306143242).groupdict(city) 结果{province: 3714, city: 81, birthday: 1993}正则表达式重点:一、r原生字符将在python里有特殊意义的字符如\b转换成原生字符就是去除它在python的特殊意义不然会给正则表达式有冲突为了避免这种冲突可以在规则前加原始字符r二、正则表达式返回类型为表达式对象的如_sre.SRE_Match object; span(6, 7), match‘a’返回对象的需要用正则方法取字符串方法有group() # 获取匹配到的所有结果不管有没有分组将匹配到的全部拿出来有参取匹配到的第几个如2groups() # 获取模型中匹配到的分组结果只拿出匹配到的字符串中分组部分的结果groupdict() # 获取模型中匹配到的分组结果只拿出匹配到的字符串中分组部分定义了key的组结果三、匹配到的字符串里出现空字符注意正则匹配到空字符的情况如果规则里只有一个组而组后面是就表示组里的内容可以是0个或者多过这样组里就有了两个意思一个意思是匹配组里的内容二个意思是匹配组里0内容即是空白所以尽量避免用否则会有可能匹配出空字符串四、()分组注意分组的意义就是在匹配成功的字符串中在提取()里组里面的字符串五、?:在有分组的情况下findall()函数不只拿分组里的字符串拿所有匹配到的字符串注意?:只用于不是返回正则对象的函数如findall()

相关新闻

抖音无水印批量下载工具:从命令行到桌面端的完整解决方案

抖音无水印批量下载工具:从命令行到桌面端的完整解决方案

抖音无水印批量下载工具:从命令行到桌面端的完整解决方案 【免费下载链接】douyin-downloader A practical Douyin downloader for both single-item and profile batch downloads, with progress display, retries, SQLite deduplication, and browser fallback su…

2026/7/28 19:44:32阅读更多 →
Windows系统CAD软件安装部署全攻略:从环境准备到问题排查

Windows系统CAD软件安装部署全攻略:从环境准备到问题排查

在实际工程设计和制图工作中,AutoCAD 作为行业标准软件,其新版本的部署与稳定运行是保障工作效率的基础。对于需要在 Windows 11 或 Windows 10 系统上进行 CAD 相关工作的工程师、设计师和学生而言,确保软件安装过程顺利、版本兼容且运行稳定…

2026/7/28 19:44:32阅读更多 →
CCF 201712-4 行车路线

CCF 201712-4 行车路线

目录思路DFS实现代码运行样例截图BFS实现代码目前我的程序提交只能得20分,我没发现哪有问题,看了好多博客下面提出的一些测试点也都能跑正确,请发现问题的小伙伴跟我讨论讨论指明一下,谢谢! 思路 按深度优先搜索的思…

2026/7/28 19:42:32阅读更多 →
CAR-T疗法的免疫原性风险能否被有效识别与管控?

CAR-T疗法的免疫原性风险能否被有效识别与管控?

CAR-T疗法的免疫原性风险能否被有效识别与管控?简述:嵌合抗原受体T细胞疗法在血液肿瘤中成效显著,但其免疫原性问题——尤其是针对小鼠源单链可变区片段的预存或治疗诱导免疫应答——正日益受到关注。一、CAR-T细胞的免疫原性源自哪些结构成分…

2026/7/29 0:51:56阅读更多 →
文声图:AI翻译私有化部署为什么是政企的硬门槛——信创适配与数据安全方案

文声图:AI翻译私有化部署为什么是政企的硬门槛——信创适配与数据安全方案

一家省级政务大厅需要为外籍访客提供多语种办事引导,翻译需求不大,每天几十条短文本。技术方案选型时,IT部门第一反应是接公有云翻译API——成本低、接入快、无需维护。方案报到信息中心后被驳回。理由很简单:办事大厅的业务数据涉…

2026/7/29 0:51:56阅读更多 →
GPT-5.6自主入侵HuggingFace事件:AI沙箱逃逸的完整技术复盘与安全启示

GPT-5.6自主入侵HuggingFace事件:AI沙箱逃逸的完整技术复盘与安全启示

2026年7月16日,Hugging Face发布了一则安全事件通告,内容让整个AI行业的从业者都倒吸一口凉气:生产基础设施遭到入侵,入侵者不是人类黑客,而是一个自主运行的AI智能体。这个AI智能体在无人干预的情况下,突破…

2026/7/29 0:51:56阅读更多 →
生命涌现的小龙虾技能之【Pet Detection Skill | 宠物检测技能】简介

生命涌现的小龙虾技能之【Pet Detection Skill | 宠物检测技能】简介

🐾 Pet Detection Skill | 宠物检测技能 智能分析中枢 图片/视频智能分析 结构化报告 历史报告云端查询 🧭 技能概览 | Overview 模块内容🏷️ 技能名称宠物检测技能🎯 核心目标宠物检测技能,检测出目标区域内出现…

2026/7/29 0:49:56阅读更多 →
【大白话说Java面试题 第201题】【09_Zookeeper篇】第2题:说一下什么是 Http 协议?

【大白话说Java面试题 第201题】【09_Zookeeper篇】第2题:说一下什么是 Http 协议?

📌 PDF:大白话说Java面试题 — 09_Zookeeper篇 第2题:说一下什么是 Http 协议? 📚 回答: 核心考点: HTTP 协议是互联网通信的基石,大厂面试中不会只问"应用层协议、请求响应模…

2026/7/29 0:49:56阅读更多 →
SHPS1: 免疫调节与细胞信号传导的关键分子

SHPS1: 免疫调节与细胞信号传导的关键分子

SHPS1SHPS1(Src homology region 2 domain-containing phosphatase substrate 1)是一种在细胞信号传导中起关键作用的分子,广泛存在于多种细胞类型中,尤其在免疫细胞中具有重要功能。其作为一种重要的细胞膜受体,相较于…

2026/7/29 0:49:56阅读更多 →
覆盖国产 + 海外 + 开源模型,OpenClaw 2.7.9 Windows/Mac 双端部署详解

覆盖国产 + 海外 + 开源模型,OpenClaw 2.7.9 Windows/Mac 双端部署详解

🔹 工具基础介绍 OpenClaw 是开源生态中一款实用性较强的本地智能工具,凭借本地离线运行、可视化图形操作和任务自动化三大核心特性,赢得了众多用户的青睐。与普通在线对话AI工具不同,它属于能够直接操控本机软硬件的智能数字员工…

2026/7/28 4:06:39阅读更多 →
伺服阀焊完微漏毁整机?精密激光焊接三关锁住高压

伺服阀焊完微漏毁整机?精密激光焊接三关锁住高压

所谓液压伺服阀体的精密激光焊接,是用激光束对阀座壳体(通常为不锈钢或铝合金)进行密封焊接,使阀体在21-35MPa的高压液压油或压缩气体中长期运行而不发生介质泄漏。液压伺服阀是高端液压系统的"大脑"。从航空航天飞行控…

2026/7/28 2:08:06阅读更多 →
D2DX:三步实现《暗黑破坏神2》高清宽屏体验的终极指南

D2DX:三步实现《暗黑破坏神2》高清宽屏体验的终极指南

D2DX:三步实现《暗黑破坏神2》高清宽屏体验的终极指南 【免费下载链接】d2dx D2DX is a complete solution to make Diablo II run well on modern PCs, with high fps and better resolutions. 项目地址: https://gitcode.com/gh_mirrors/d2/d2dx 你是否还在…

2026/7/28 1:38:28阅读更多 →
28. Agent 执行到一半想暂停?用 interrupt 给它设个“关卡“!

28. Agent 执行到一半想暂停?用 interrupt 给它设个“关卡“!

28. Agent 执行到一半想暂停?用 interrupt 给它设个“关卡“! 在构建复杂的 Agent 系统时,我们经常会遇到这样的场景:Agent 正在执行一个多步骤的任务,比如“下单购买商品”,但执行到一半时,我们…

2026/7/29 0:01:46阅读更多 →
自律同行,突破无界!NANK南卡正式官宣曾舜晞成为品牌代言人

自律同行,突破无界!NANK南卡正式官宣曾舜晞成为品牌代言人

近日,国际专注开放式技术研发的声学品牌Nank南卡,正式官宣实力艺人曾舜晞担任品牌代言人。消息一经发出便轰动全网。为什么耳机品牌不选择流量明星、老牌歌手?而且是选择曾舜晞?让我们一起来探索一下!比起短期的流量&a…

2026/7/29 0:01:46阅读更多 →
【RT-DETR多模态创新改进】CVPR 2025 | 独家特征融合创新改进篇 | 引入RLAB残差线性注意力模块,有效融合并强调多尺度特征,多种改进点,适合红外与可见光融合目标检测任务,有效涨点

【RT-DETR多模态创新改进】CVPR 2025 | 独家特征融合创新改进篇 | 引入RLAB残差线性注意力模块,有效融合并强调多尺度特征,多种改进点,适合红外与可见光融合目标检测任务,有效涨点

一、本文介绍 🔥本文在RT-DETR多模态融合目标检测中引入RLAB残差线性注意力模块,可在不同模态特征交互阶段进行多次残差细化,使可见光、红外等特征在尺度、语义和空间位置上更好对齐;随后将细化特征与解码器输出拼接并生成Q、K、V,通过线性注意力自适应强化关键通道、目…

2026/7/29 0:01:46阅读更多 →
YOLOv8推理性能优化:从1.2FPS到35FPS的全链路加速实践

YOLOv8推理性能优化:从1.2FPS到35FPS的全链路加速实践

如果你在部署 YOLOv8 时,发现推理速度只有可怜的 1-2 FPS,而别人的演示视频却能跑到 30 FPS 以上,那么问题很可能不在模型本身,而在于你的整个处理链路。很多开发者拿到一个训练好的 YOLOv8 模型后,会直接使用官方示例…

2026/7/28 20:22:24阅读更多 →
Coze与Dify对比指南:低代码AI应用开发从入门到实战

Coze与Dify对比指南:低代码AI应用开发从入门到实战

1. 从零到一:为什么你需要了解 Coze 和 Dify?如果你对 AI 应用开发感兴趣,但一看到“大模型”、“智能体”、“工作流”这些词就头疼,觉得门槛太高,那这篇文章就是为你准备的。很多开发者,包括我自己&#…

2026/7/28 3:17:03阅读更多 →
AI生图工具怎么选?2026年6月版实测对比

AI生图工具怎么选?2026年6月版实测对比

做自媒体的朋友应该都有体会:配图一直是个让人头疼的问题。2026年,AI生图工具已经非常成熟了,但工具太多反而不知道怎么选。以下是截至2026年6月我对主流AI生图工具的实测对比。Midjourney V8.1:速度之王2026年6月11日&#xff0c…

2026/7/28 2:35:58阅读更多 →