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()

相关新闻

企业裁员赔偿方案设计与实施全解析

企业裁员赔偿方案设计与实施全解析

1. 企业人员调整背后的经济逻辑最近某大型企业宣布裁员6.4万余人的消息引发广泛关注,其中"N4"的高额赔偿方案更是成为讨论焦点。作为经历过多次企业组织调整的HR从业者,我想从实际操作层面解析这类大规模人员调整背后的决策逻辑和执行细节。企…

2026/7/28 19:26:40 阅读更多
零代码改造Codex:低成本接入DeepSeek实现高效AI编程

零代码改造Codex:低成本接入DeepSeek实现高效AI编程

如果你正在使用 Codex 作为 AI 编程助手,但觉得官方模型调用成本太高,或者希望获得更符合中文开发者习惯的代码建议,那么这篇文章就是为你准备的。Codex 本身是一个强大的 AI 编程工具,但其默认的官方模型(如 GPT-4&am…

2026/7/28 19:26:40 阅读更多
NBM7100A电池增强器在物联网节点的能效优化实践

NBM7100A电池增强器在物联网节点的能效优化实践

1. 项目背景与核心挑战在物联网设备井喷式发展的今天,无线传感器节点作为数据采集的神经末梢,其供电问题始终是制约设备部署的关键瓶颈。我曾参与过一个农业环境监测项目,当看到300个传感器节点中有23%因电池耗尽提前"阵亡"时&…

2026/7/28 19:26:40 阅读更多
Selenium自动化实战:跨境电商数据采集与竞品监控完全指南

Selenium自动化实战:跨境电商数据采集与竞品监控完全指南

在跨境电商的日常运营中,数据采集和竞品监控是两项高频需求。无论是调研竞品的价格和评论、分析用户反馈,还是追踪竞争对手的Listing变化,手工操作都费时费力。Selenium作为目前最成熟的浏览器自动化工具,可以完美解决这些重复性工…

2026/7/29 5:46:05 阅读更多
JTAG to AXI IP核实战指南:从原理到调试的完整路径

JTAG to AXI IP核实战指南:从原理到调试的完整路径

1. 项目缘起:为什么需要整理PG174文档?如果你是一位FPGA工程师,或者正在使用Xilinx(现在叫AMD)的Zynq或Versal系列SoC,那么“JTAG to AXI”这个功能你一定不陌生。它就像一座连接PC端调试工具和芯片内部AXI…

2026/7/29 5:46:05 阅读更多
创客思维融合乐高:用Arduino与传感器打造智能动态模型

创客思维融合乐高:用Arduino与传感器打造智能动态模型

1. 项目概述:当“创客”思维遇上乐高积木最近在整理工作室,看着角落里几大箱乐高积木,突然想到一个挺有意思的话题。我们这代人,很多都是玩着乐高长大的,从得宝大颗粒到科技系列,从照着图纸拼到自由发挥。但…

2026/7/29 5:46:05 阅读更多
C# 定位,卡尺,C#代码结合,测量宽度。

C# 定位,卡尺,C#代码结合,测量宽度。

E:\DISK1\VisionPro\Images\bracket_std.idb创建两个块第一个做模板匹配和定位第二个是卡尺把8位图给输出,为什么不是参数而是图片,因为参数绑定图片上了。第二个卡尺块分别设置好给的坐标查看运行正常开始写代码(测试代码可跳过)…

2026/7/29 5:46:05 阅读更多
时序逻辑电路设计:从触发器到状态机的核心原理与实践

时序逻辑电路设计:从触发器到状态机的核心原理与实践

1. 从组合逻辑到时序逻辑:为什么“记忆”是数字电路的分水岭如果你已经学过了组合逻辑电路,可能会觉得数字电路的世界就是一堆与门、或门、非门,输入一变,输出立刻跟着变,干净利落。但当你开始接触“时序逻辑电路”时&…

2026/7/29 5:46:05 阅读更多
软件设计师备考全攻略:从知识体系构建到实战应试技巧

软件设计师备考全攻略:从知识体系构建到实战应试技巧

1. 备考缘起与核心价值最近几年,身边不少朋友和同事都在讨论“软考”,尤其是中级资格的《软件设计师》。有人是为了职称评定,有人是为了积分落户,也有人纯粹是想系统梳理一下自己的知识体系,给职业生涯加个“官方认证”…

2026/7/29 5:36:05 阅读更多