成都9班-肖竹 发表于 2021-11-20 21:03:55

正则表达式


   re模块数量词匹配符号^:表示的匹配字符以什么开头
符号$:表示的匹配字符以什么结尾
符号*:匹配*前面的字符0次或n次
eg:ab* 能匹配a 匹配ab 匹配abb
符号+:匹配+前面的字符1次或n次
符号?:匹配?前面的字符0次或1次
符号{m}:匹配前一个字符m次
符号{m,n}:匹配前一个字符m到n次(包括n次),m或n可以省略,mn都是



   预定义字符集匹配\d:数字0-9 \D:非数字 \s:空白字符 \n:换行符 \r:回车符
str1=re.match("\d","234asd123) //print(str1.group()) 输出数字2
str1=re.match("\d*","234asd123) //print(str1.group())输出数字234(字符串以字母开头则返回空)
str1=re.match("\d+","234asd123) //print(str1.group())输出数字234(字符串以字母开头则报错)
str1=re.match("\D","f234asd123) //print(str1.group())输出字母f



   re模块相关函数match 从第一个字符开始匹配,如果第一个字符不是要匹配的类型、则匹配失败并报错//如果规则带了'+',则匹配1次或者多次,无'+'只匹配一次
search 从第一个字符开始查找、一找到就返回第一个字符串,找到就不往下找,找不到则报错
findall 从第一个字符开始查找,找到全部相关匹配为止,找不到返回一个列表[]
compile 编译模式生成对象,找到全部相关匹配为止,找不到返回一个列表[]



   search从第一个字符开始查找,一找到就返回第一个字符串,找到就不往下找,找不到就报错
str1=re.search("\d","123asd123")//print(str1.group()) 输出数字2
str1=re.search("\d*","123asd123")//print(str1.group()) 输出数字234
str1=re.search("\d*","a123asd123")//print(str1.group()) 返回空
str1=re.search("\d+","a123asd123")//print(str1.group()) 输出239,具有穿透性



   findall从第一个字符开始查找,找到全部相关匹配位置,找不到返回一个列表
str1=re.findall("\d","as123asd123")//print(str1)输出["1","2","3","1","2","3"]
str1=re.findall("\d+","as123asd123")//print(str1)输出["123","123"]
str1=re.findall("123","as123asd123")//在指定字符串中匹配我需要的字符
str1=re.findall("as(.*)as","as123asd123")//匹配括号里面的内容   在正则中“.”代表任意字符
区别贪婪匹配和非贪婪匹配
str1=re.findall("1\d{8}","a18012341234b18112341234")//[]代表某一位上面能够取的值,{}代表要匹配几次



   compile编译模式生成对象,找到全部相关匹配为止,找不到返回一个空列表[]
str1=re.compile("error").findall("errorssserrorerror")   将所有error取出并生成一个列表

页: [1]
查看完整版本: 正则表达式