python中匹配字符串_python题库及答案解析

python中匹配字符串_python题库及答案解析实用Python程序设计笔记|第九章、正则表达式视频课程:实用Python程序设计_中国大学MOOC(慕课) (icourse163.org)专栏目录:从零开始学python专栏目录1、正则表达式的概念和组成正则表达式作用: 可以用来判断某个字符串是否符合某种模式,比如判断某个字符 串

实用Python程序设计笔记|第九章、正则表达式   视频课程:实用Python程序设计_中国大学MOOC(慕课) (icourse163.org)   专栏目录:从零开始学python专栏目录   1、正则表达式的概念和组成   正则表达式   作用: 可以用来判断某个字符串是否符合某种模式,比如判断某个字符 串是不是邮箱地址,网址,电话号码,身份证号……可以用来在文本中寻找并抽取符合某种模式的字符串,比如电子邮件地址,电话号码,网址,身份证号……,找出三国演义中所有孔明提到曹操的场合都说了些啥。   概念:   正则表达式是个某些字符有特殊含义字符串,表示一种字符串的模式(格式)。   可以用相关函数求给定字符串和正则表达式的匹配情况。   正则表达式中的功能字符   字符/组合匹配的模式正则表达式匹配的字符串.除’\n’外的任意一个字符,包括汉字(多行匹配方式下也能匹配’\n’)’a.b”acb”adb”a(b’……*量词。表示左边的字符可以出现0次或任意多次’a*b”b”ab”aaaab’……?量词。表示左边的字符必须出现0次或1次’ka?b”kb”kab’+量词。表示左边的字符必须出现1次或更多次’ka+b”kab”kaaab’……{m}量词。m是整数。表示左边的字符必须且只能出现m次’ka{3}b”kaaab'{m,n}量词。m、n是整数。表示左边的字符必须出现至少m次、至多n次。n也可以不写,表示出现次数没有上限’ka{1,3}b”kab”kaab”kaaab’\d一个数字字符,等价于[0-9]’a\db”a2b”a3b’……\D一个非数字的字符,等价于[^\d],也等价于[^0-9]’a\Db”acb’……\s一个空白字符,如空格、\t、\r、\n等’a\sb”a b”a\nb’……\S一个非空白字符’a\Sb”akb’……\w一个单词字符:包括汉字或大小写英文字母、数字、下划线、或其它语言的文字’a\wb”a_b”a中b’……\W一个不是单词字符的字符’a\Wb”a?b’……|A|B表示能匹配A或能匹配B均算能匹配’ab|c”ab”c’   remark:在python字符串中,\s等不是转义字符,都是两个字符。   正则表达式中的特殊字符   正则表达式中常见的特殊字符有以下几个:   如果要在正则表达式中表示这几个字符本身,就应该在其前面加“\”。   2、字符范围[]和量词   [XXX]的用法   用以表示“此处必须出现一个某某范围内的字符”,或者“此处必须出现一个字符,但不可以是某某范围内的字符”。   举例:[a2c]匹配’a’,’2′,’c’之一[a-zA-Z]匹配任一英文字母[\da-z\?]匹配一个数字或小写英文字母或’?'[^abc]匹配一个非’a’,’b’,’c’之一的字符[^a-f0-3]匹配一个非英文字母’a’到’f’,也非数字’0’到’3’的字符   匹配汉字   汉字的unicode编码范围是4e00-9fa5(16进制),因此[\u4e00-\u9fa5]即表示一个汉字。   正则表达式示例   [1-9]\d*正整数-[1-9]\d*负整数-?[1-9]\d*|0整数[1-9]\d*|0非负整数-?([1-9]\d*\.\d*[1-9]|0\.\d*[1-9]|0)左右都没有多余0的小数\w+([-+.]\w+)*@\w+([-.]\w+)*\.\w+([-.]\w+)*邮箱   3、正则表达式的函数   使用正则表达式   re.match函数   从字符串string的起始位置匹配一个模式patternflags标志位,用于控制模式串的匹配方式,如:是否区分大小写,多行匹配等等,如re.M|re.I 表示忽略大小写,且多行匹配成功则返回一个匹配对象,否则返回None   re.search函数   查找字符串中可以匹配成功的子串。若匹配成功,则返回匹配对象;若无法匹配,则返回None。   re.findall函数   查找字符串中所有和模式匹配的子串(不重叠)放入列表。一个子串都找不到就返回空表。   re.finditer函数   查找字符串中所有和模式匹配的子串(不重叠),每个子串对应于一个匹配对象,返回匹配对象的序列(准确说是“可调用迭代器”)   re.sub替换匹配的子串   4、边界符号   \A表示字符串的左边界,即要求从此往左边不能有任何字符\Z表示字符串的右边界,即要求从此往右边不能有任何字符^与\A同。但多行匹配模式下还可以表示一行文字的左边界。$与\z同。但多行匹配模式下还可以表示一行文字的右边界。\b表示此处应为单词的左边界或右边界,即不可是单词字符\B表示此处不允许是单词的左边界或右边界,即必须是单词字符   边界符号本身不会和任何字符匹配。   Python字符串’\A’、’\Z’都是两个字符,而不是像’\n’那样的一个字符。   正则表达式的边界符号’\b’是两个字符。但是在Python字符串中,’\b’和’\t’、’\n’类似,是一个字符(Backspace)。因此在正则表达式中使用边界符号\b,要写’\\b’。如果写’\\\\b’,则连续的两个’\’被看作是一个普通的’\’,不会和后面的’b’一起被当作字符组合,变成边界符号’\b’。   5、分组(…)   括号中的表达式是一个分组。   多个分组按左括号从左到右从1开始依次编号   输出结果:   在分组的右边可以通过分组的编号引用该分组所匹配的子串   例子1:   输出结果:   例子2:   输出结果:   分组作为一个整体,后面可以跟量词   不要求分组的多次出现必须匹配相同字符串。   输出结果:   re.findall和分组   在正则表达式中没有分组时,re.findall返回所有匹配子串构成的列表。有且只有一个分组时,re.findall返回的是一个子串的列表,每个素是一个匹配子串中分组对应的内容。   输出结果:   在正则表达式中有超过一个分组时,re.findall返回的是一个组的列表,每个组对应于一个匹配的子串,组里的素,依次是1号分组、2号分组、3号分组……匹配的内容   输出结果:   remark:引用和斜杠   输出结果:   6、“|”的用法   表示“或”,如果没有放在“()”中,则起作用范围是直到整个表达式开头或结尾或另一个“|”从左到右短路匹配(匹配上一个后就不计算是否还能匹配后面的)“|”也可以用于分组中,起作用范围仅限于分组内   7、贪婪匹配模式和懒惰匹配模式   量词的贪婪模式   量词+、*、?、{m,n}默认匹配尽可能长的子串。   输出结果:   但是贪婪模式有时候也会有问题   比如,在html文本中想要找到<h3>xxx</h3>之间的内容xxx   输出结果:   而不是我们希望得到的abd和afaef   量词的非贪婪(懒惰)模式   在量词+、*、?、{m,n}后面加’?’则匹配尽可能短的字符串。   输出结果:   至于为什么最后两行代码匹配到的是abd</h3><h3>afaef,而不是afaef。   可能是因为正则表达式有另一条规则,比懒惰/贪婪规则的优先级更高:最先开始的匹配拥有最高的优先权——The match that begins earliest wins。(参考自正则表达式(二) – mutianzhixi – 博客园)   举个例子:   输出结果:   而不是ab。匹配的方向应该是从左到右进行的。   8、匹配对象   “匹配对象”(匹配成功时的返回结果)的属性   string:匹配时使用的母串。lastindex:最后一个被匹配的分组的编号(不是最大编号)。如果没有被匹配的分组,将为None。group([n1,n2,…])✦获得一个或多个分组匹配的字符串;指定多个参数时将以组形式返回。n1,n2…可以使用编号也可以使用名字;✦编号0代表整个匹配的子串(与模式里面的“()”无关);✦group()等价于group(0);✦没有匹配字符串的组返回None;✦匹配了多次的组返回最后一次匹配的子串。groups([default])以组形式返回全部分组匹配的字符串。相当于调用group(1,2,…last)。default表示没有匹配字符串的组以这个值替代,默认为None。groupdict([default])返回以有名字的组的名字为键、以该组匹配的子串为值的字典,没有名字的组不包含在内。default含义同上。start([group])返回指定的组匹配的子串string中的起始位置。group默认值为0.end([group])返回指定的组匹配的子串在string中的结束位置(子串最后一个字符的位置+1)。group默认值为0。span([group])返回(start(group),end(group))。group可以是组编号,也可以是组名字,缺省为0。   remark:简化正则表达式的编写   一般来说,要写一个精确的正则表达式,比如写一个正则表达式来匹配ip地址,要做到匹配它的字符串一定是ip地址,且ip地址一定能匹配它,是比较困难的。   正则表达式可以写得宽容一些,即ip地址一定能匹配它,但是能匹配它的不一定是ip地址。对匹配的字符串,另外再做一些额外的判断排除掉非ip地址,这样做比写精确的正则表达式容易。   本章习题:实用Python程序设计习题9

2024最新激活全家桶教程,稳定运行到2099年,请移步至置顶文章:https://sigusoft.com/99576.html

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请联系我们举报,一经查实,本站将立刻删除。 文章由激活谷谷主-小谷整理,转载请注明出处:https://sigusoft.com/71182.html

(0)
上一篇 2024年 8月 7日 上午7:08
下一篇 2024年 8月 7日

相关推荐

关注微信