Python正则表达式
主要是*和?的区别。前者匹配尽可能多,后者匹配尽可能少
Pattern Pattern对象是一个编译好的正则表达式,通过Pattern提供的一系列方法可以对文本进行匹配查找。 Pattern不能直接实例化,必须使用re.compile()进行构造。随后通过re.match(str)或者re.search(str)
这个方法将从string的pos下标处起尝试匹配pattern;如果pattern结束时仍可匹配,则返回一个Match对象; 如果匹配过程中pattern无法匹配,或者匹配未结束就已到达endpos,则返回None。? pos和endpos的默认值分别为0和len(string);re.match()无法指定这两个参数,参数flags用于编译pattern时指定匹配模式。? 注意:这个方法并不是完全匹配。当pattern结束时若string还有剩余字符,仍然视为成功。想要完全匹配,可以在表达式末尾加上边界匹配符'$'。?
这个方法用于查找字符串中可以匹配成功的子串。从string的pos下标处起尝试匹配pattern,如果pattern结束时仍可匹配,则返回一个Match对象; 若无法匹配,则将pos加1后重新尝试匹配;直到pos=endpos时仍无法匹配则返回None。? pos和endpos的默认值分别为0和len(string));re.search()无法指定这两个参数,参数flags用于编译pattern时指定匹配模式。? split(string[,maxsplit]) | re.split(pattern,maxsplit]):? 按照能够匹配的子串将string分割后返回列表。maxsplit用于指定最大分割次数,不指定将全部分割。?
搜索string,以列表形式返回全部能匹配的子串。
搜索string,返回一个顺序访问每一个匹配结果(Match对象)的迭代器。?
finditer函数和findall函数的区别是,findall返回所有匹配的字符串,并存为一个列表,而finditer则并不直接返回这些字符串,而是返回一个迭代器。 关于迭代器,解释起来有点复杂,还是看看例子把: sub(repl,count]) | re.sub(pattern,repl,count]):? 使用repl替换string中每一个匹配的子串后返回替换后的字符串。? 当repl是一个字符串时,可以使用id或g 当repl是一个方法时,这个方法应当只接受一个参数(Match对象),并返回一个字符串用于替换(返回的字符串中不能再引用分组)。 count用于指定最多替换次数,不指定时全部替换。? subn(repl,count]) |re.sub(pattern,count]):? 返回 (sub(repl,count]),替换次数)。?
这个方法是Pattern类的工厂方法,用于将字符串形式的正则表达式编译为Pattern对象。 ?第二个参数flag是匹配模式,取值可以使用按位或运算符'|'表示同时生效,比如re.I | re.M。 可选值有: re.I(re.IGNORECASE): 忽略大小写(括号内是完整写法,下同) M(MULTILINE): 多行模式,改变'^'和'$'的行为 S(DOTALL): 点任意匹配模式,改变'.'的行为 L(LOCALE): 使预定字符类 w W b B s S 取决于当前区域设定 U(UNICODE): 使预定字符类 w W b B s S d D 取决于unicode定义的字符属性 X(VERBOSE): 详细模式。这个模式下正则表达式可以是多行,忽略空白字符,并可以加入注释。以下两个正则表达式是等价的:
re提供了众多模块方法用于完成正则表达式的功能。这些方法可以使用Pattern实例的相应方法替代,唯一的好处是少写一行re.compile()代码,但同时也无法复用编译后的Pattern对象。这些方法将在Pattern类的实例方法部分一起介绍。如上面这个例子可以简写为:
re模块还提供了一个方法escape(string),用于将string中的正则表达式元字符如*/+/?等之前加上转义符再返回,在需要大量匹配元字符时有那么一点用。
(编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |