当前位置: 首页 > news >正文

泰安建材网站建设电话衡水有做网站的吗

泰安建材网站建设电话,衡水有做网站的吗,手机网站 域名解析,常见服务器1#xff0c;匹配符号基本元字符. : 任意字符#xff0c;除了\n#xff0c;flags设置为DOTALL(S)可以让.匹配\n|#xff1a;逻辑或\#xff1a;转义()#xff1a;捕获组空白字符[\b] : 回退\f : 换页\n : 换行\r : 回车\t : 制表tab\v : 垂直制表特定字符\d : 数字#…1匹配符号基本元字符. : 任意字符除了\nflags设置为DOTALL(S)可以让.匹配\n|逻辑或\转义()捕获组空白字符[\b] : 回退\f : 换页\n : 换行\r : 回车\t : 制表tab\v : 垂直制表特定字符\d : 数字等价[0-9]\D : 非数字等价[^0-9]\w : 字母或数字或_等价[A-Za-z0-9_]\W : 非字母非数字非_等价[^A-Za-z0-9]\s : 空白字符等价[\f\n\r\t\v]\S : 非空白字符等价[^\f\n\r\t\v]重复匹配 : 一个或多个* : 零个或多个? : 零个或一个{n} : n次{n,} : 最少n次{n,m} : 最少n次最多m次备注和*是贪婪型有多少匹配多少加上?可以变懒惰型位置匹配\b : 单词边界即\w和\W之间的位置\B : 非单词边界^ : 字符串开头flags设置为MULTILINE(M)可以匹配\n后的位置$ : 字符串结尾flags设置为MULTILINE(M)可以匹配\n前的位置\A字符串开头\Z字符串结尾?向前查找?向后查找2字符集字符集[]的规范/元字符不同于正则式主体字符集中的特有元字符-连字符表示范围如果不想表示范围必须放最前面^对字符集取反作用于给定字符集内所有的字符或范围而不是仅限于^后面的一个字符或区间正则表达式主体中的元字符在字符集中无需转义的(转义了也可以pycharm提示多余的)().*?匹配举例[0-9] : 数字[A-Z] : 大写字母[a-z] : 小写字母[A-Za-z0-9] : 字母或者数字[^0-9] : 非数字[.(] : .或([]字符集合内的元字符无需转义[-.\s]-或.或空白字符-如果不想表示范围必须放最前面[\n\d\s]: 匹配换行符或数字或空白备注如果想通过字符集[]匹配转义符\则正则表达式引擎必须接受字符\\print(a[\]b) # a[\]bprint(a[\\]b) # a[\]b和单\结果一样因为单\会自动转义详见后面的转移章节说明print(ra[\\]b) # a[\\]bOK!3匹配flagsMULTILINE(M)改变“^”和“$”让“^”能够匹配到换行符后的位置让“$”能够匹配到换行符前的位置DOTALL(S)改变“.”让“.”能够匹配换行符IGNORECASE(I)忽略大小写LOCALE(L)UNICODE(U)VERBOSE(X)ASCII(A)re.M可以使得^和$匹配\n后和\n前得位置例如用\n也可以匹配结果但是\n不是位置匹配会把\n也匹配在内。 s aaa\nbbb\nccc r re.search(^bbb$, s) r # 匹配不到 r re.search(^bbb$, s, re.M) r.group()bbb r re.search(\nbbb\n, s, re.M) r.group()\nbbb\n总结经过re.M改造后的^和$相当于是向前查找和向后查找结合了‘\n’例如s start\nhello guxh2\nendprint(s)starthello guxh2endprint(repr(s))start\nhello guxh2\nend re.findall(r^hello .*?$, s, re.M)[hello guxh2] re.findall(r(?\n)hello .*?(?\n), s)[hello guxh2] re.findall(r\nhello .*?\n, s) # 不加定界会匹配上\nre.findall(r\nhello .*?\n, s)4匹配模式整体匹配(只匹配第一次)re.search / re.match全局匹配(匹配所有)re.findall分组捕获()整体匹配和全局匹配都可以进行分组捕获捕获匹配结果中的部分内容分组捕获可以嵌套详见匹配举例。分组可以嵌套匹配结果会含大分组和子分组的结果。5匹配写法方法一需要重复执行匹配的先编译再匹配好处是多个地方用到这个匹配模式regex想修改时只需要修改一个地方regex re.compile(p)regex.search(s)re.search(regex, s)方法二简单的可以直接匹配re.search(p, s)6python提供的匹配方法1)re.search(p, s)从s中提取完全符合p的内容只提取第一次命中的返回re.match对象提取整体匹配结果searchObj.group(), searchObj.group(0)提取所有分组捕获结果searchObj.groups()提取单个分组捕获结果searchObj.group(n), 即groups()[i] group(i1)2)re.findall(p, s)提取所有符合p的内容返回字符串组成的列表使用分组捕获时返回分组捕获结果(元组)组成的列表re.search使用分组捕获时既可以捕获整体匹配也可以捕获分组内容re.findall使用分组捕获时只能捕获分组内容3)re.match(p, s)可以用re.search(^)替代MULTILINE模式下match也只匹配s但re.search可以匹配换行后的开始4)re.finditer(p, s)re.findall的惰性版返回iterator5)re.split(p, s)根据p分割字符串s6)re.sub(p, repl, s, countn)p是匹配到的值repl是替换后值s是m目标字符串count是替换多少次re.subn(p, repl)可以返回替换次数7懒惰匹配和贪婪匹配*和都是贪婪比配尽可能多可以结合?变成懒惰匹配re.search(a.*?b, abab).group()abre.search(a.*?b, abab).group()ababre.search(192\.168\.1\..*$, 192.168.1.12).group()192.168.1.12re.search(192\.168\.1\..*?, 192.168.1.12).group() # 没有结束符懒惰不匹配192.168.1.re.search(192\.168\.1\..*, 192.168.1.12).group() # 没有结束符贪婪匹配至最后192.168.1.128转义1)python语言的转义\n在python中代表换行print输出时会做特殊处理s x\nzprint(s) # x(换行)zprint(repr(s)) # x\nz要想print输出x\nz需要对\进行转义s x\\nz # 或s rx\nzprint(s) # x\nzprint(repr(s)) # x\\nz如果\ 字符没有特殊含义python语言会自动对\进行转义s x\yzprint(s) # x\yzprint(repr(s)) # x\\yz发现多了个\自动转义时PEP8会提示invalid escape sequence \y看来PEP8要求\字符没有特殊含义时统一做好转义2)正则表达式的转义 - 非元字符传递给正则引擎的字符串regex的内容是print(regex)的结果而不是print(repr(s))的结果假设s x\yzprint(s)的结果是x\yzprint(repr(s))的结果是x\\yz传递给正则表达式的是x\yz匹配时也是匹配对象字符串s的print(s)的结果和编程语言的转义一样正则引擎也有自己的转义规则当\ 字符属于元字符时可以进行特殊处理例如\w匹配字符数字以及_但是如果\ 字符不是元字符即没有特殊含义时正则引擎不会像编程语言那样自动进行转义而是要求必须接收转义后的\例如s rx\yzregex x\\yz # 或者regex x\yzprint(regex)都是x\yz传递给正则引擎的就是x\yzre.search(regex, s) # re.error: bad escape \y at position 1这样的字符串传递给正则引擎才能得到正确处理regex rx\\yz # print(regex)是x\\yzprint(repr(regex))是x\\\\yzregex x\\\yz # 同上regex x\\\\yz # 同上为什么x\\\yz和x\\\\yz结果一样呢因为对于\\\y前2个\\转义为\后面的\ypython语言自动转义成了\y(同样也会收到PEP8提示)3)正则表达式的转义 - 元字符假设要匹配的字符串为a(换行)b即s a\nb传递给正则表达式的字符串regex经过转义其print(regex)结果应当为a\nb于是匹配写法为regex ra\nb # 或者regex a\\nbre.search(regex, s) # 可以匹配中s但是发现未经转义的a\nb也能匹配中(换成制表符\t也能匹配)regex a\nbre.search(regex, s) # 也能匹配中这是因为给字符串传递a(换行)b时字符串恰好会将其识别为\n交给正则引擎时就能够正确去匹配a(换行)b但是如果python语言字符串和正则引擎对字符的解释不一样时转义或者不转义效果就会不同例如s a*regex1 a\x2Aregex2 a\\x2Are.search(regex1, s) # 匹配结果为are.search(regex2, s) # 匹配结果为a*对于\x2A(即*)正则表达式解释为匹配前一个字符0次1次或多次。如果和\n一样则不管是a\x2A还是a\\x2A都能匹配中a*但实际上不转义\就无法匹配a*那是因为不转义的*在正则表达式中是元字符被赋予了其他含义。而*在python语言字符串中却没有特殊含义。9捕获组1)捕获组对现有匹配方法对影响捕获组对re.findall的影响s abcabcabcre.findall(abc, s) # [abc, abc, abc]re.findall(a(b)c, s) # [b, b, c]re.findall((a(b)c)) # [(abc, b), (abc, b), (abc, b)]捕获组对re.sub的影响s abcabcabcre.sub(abc, x, s) # xxxre.sub(a(b)c, x, s) # xxxre.sub((a(b)c), x, s) # xxx备注看上去对sub不起作用但捕获组可以用来回溯引用2)捕获组的回溯引用s hello world re.search(r.*?, s) # 可以匹配sre.findall(r.*?, s) # [h1]re.sub(re.sub(r(.*?), r\1,\2, s)) # h1, hello worldre.sub会对匹配中的整个字符串进行替换3)捕获组的命名ID 310115199012128765p (?P[0-9]{6})(?P[0-9]{8})re.search(p, ID).groupdict(){dictrict: 310115, birthday: 19901212}10前后查找前后查找属于位置匹配(?s)向后查找s后面的位置(?s)向前查找s前面的位置s ab1c ab2c\nab3cre.findall((a.*?)(?:\s|$), s) # $不能放字符集[]里面[ab1c, ab2c, ab3c]re.findall(((?b).*?)(?:\s|$), s) # b后面的位置开始[1c, 2c, 3c]re.findall(((?b).*?)(?:\s|$), s) # b前面的位置开始[b1c, b2c, b3c]前后查找和findall即使正则表达式捕获的是位置但是有了捕获组以后findall会返回捕获组的内容参考之前的re.findall(a(b)c, s)s 1234567890re.findall(r(?\d)(?(\d\d\d)$), s) # [890, 890, 890]实际上正则表达式匹配的是三个位置但有了捕获组以后findall的返回结果是捕获组内容re.findall(r(?\d)(?(?:\d\d\d)$), s) # [, , ]改为非捕获型后findall返回的是三个位置1|234|567|890可以在该位置插入字符r re.sub(r(?\d)(?(?:\d\d\d)$), :, s) # 1:234:567:890前后查找和subsub是对匹配到的内容进行替换捕获组不会对替换结果产生影响捕获组在sub中只是用户回溯引用参考9捕获组中的回溯引用re.sub(r(?\d)(?(\d\d\d)$), |, s) # 1|234|567|890对匹配到的内容(位置)进行替换re.sub(r(?\d)(?(?:\d\d\d)$), |, s) # 1|234|567|890对匹配到的内容11匹配举例ab1c ab2c\nab3c匹配例子s ab1c ab2c\nab3cre.search(a.*?c a.*?c, s).group() # 整体匹配ab1c ab2cre.search(a(.*?)c a(.*?)c, s).groups() # 整体匹配 捕获分组b1 b2re.search(a(\w(\w))c a(\w(\w))c, s).groups() # 整体匹配 捕获分组(b1, 1, b2, 2)re.findall(a.*?c, s) # 全局匹配[ab1c, ab2c, ab3c]re.findall(a(.*?)c, s) # 全局匹配 捕获分组只能捕获分组内容[b1, b2, b3]re.findall(a(\w(\w))c, s) # 全局匹配 捕获分组嵌套[(b1, 1), (b2, 2), (b3, 3)]re.findall(a.*?c$, s)[ab3c]re.findall(a.*?c$, s, flagsre.M) # re.M影响$[ab1c ab2c, ab3c]re.findall(^a.*?c, s)[ab1c]re.findall(^a.*?c, s, flagsre.M) # re.M影响^[ab1c, ab3c]re.search(a.*c, s).group()ab1c ab2cre.search(a.*c, s, flagsre.DOTALL).group() # re.DOTALL影响.ab1c ab2c\nab3cre.split(\s, s)[ab1c, ab2c, ab3c]re.split((\s), s) # re.split 分组可以看到分隔符[ab1c, , ab2c, \n, ab3c]a b, c ; d\ e匹配例子s a b, c ; d\ esa b, c ; d\\ e # \被自动转成\\re.split(r\s*[\s,;\\]\s*, s)[a, b, c, d, e]re.split(r\s*(?:\s|,|;|\\)\s*, s) # []的等效写法[a, b, c, d, e]re.split(r\s*(\s|,|;|\\)\s*, s) # 不用?:只抓到了单个分隔符用它去对s分割会包含单个分隔符[a, , b, ,, c, ;, d, \\, e] re.split(r(\s*(?:\s|,|;|\\)\s*), s) # 包含完整的分隔符[a, , b, , , c, ; , d, \\ , e]
http://www.pierceye.com/news/969417/

相关文章:

  • 营销型网站服务长沙做网站费用
  • 提供信息门户网站定制怎样做wordpress模板
  • 做爰小视频网站如何制作淘宝客网站
  • 公司架设网站费用怎么做分录linux网站开发软件
  • 网站可信图标精品网站建设费用 地址磐石网络
  • 朝阳住房和城乡建设厅网站学佛网站开发项目需求分析
  • 做快递单的网站会不会是骗人的网站推广营销收费
  • 网站设计师需要学什么wordpress focus
  • 查询网网站十大求职招聘app排行
  • 百度 搜索到手机网站wordpress百科汉化
  • 自己做的网站点击赚钱徐州万网网站建设
  • 网站定制生成器网页制作需要会哪些
  • 最重要的网站官方网站手机 优帮云
  • 建一个展示网站下班多少钱怎样给一个公司做网站改版
  • wordpress 网站死机php7.0 wordpress 设置
  • 免版权费自建网站自考本科官网
  • 使用ai做网站设计长沙建设网站哪家好
  • 建设行业网站价格公共服务标准化建设
  • 电商网站开发发展和前景网站建设案例多少钱
  • 网站建设特效代码做销售用什么网站
  • 如何做中英版网站上海到北京机票
  • 海淀网站建设枣庄微信官网小程序注册
  • 投诉网站制作事件营销的概念
  • 做网站一个程序员够吗企业互联网推广
  • 安徽省建设工程资料上传网站网站内容优化
  • 直接用apk 做登陆网站呢图网站场建设封面
  • 书店网站的建设网络服务器搭建
  • led灯网站模板电商网站开发人员人数
  • 南阳网站建设报价沧州南皮网站建设
  • 网站左侧分类导航菜单用PS做的个人网站图片