正则

来源:互联网 发布:网络出版之我见 编辑:程序博客网 时间:2024/06/03 15:49

字符转义


如果你想查找元字符本身的话,比如你查找.,或者*,就出现了问题:你没办法指定它们,因为它们会被解释成别的意思。这时你就得使用\来取消这些字符的特殊意义。因此,你应该使用\.\*。当然,要查找\本身,你也得用\\.

例如:deerchao\.net匹配deerchao.netC:\\Windows匹配C:\Windows

需要转义的字符: (  ) . * ?  \  + 





规则是:从左向右,以分组的左括号为标志,第一个出现的分组的组号为1,第二个为2,以此类推。

  • 分组0对应整个正则表达式
  • 实际上组号分配过程是要从左向右扫描两遍的:第一遍只给未命名组分配,第二遍只给命名组分配--因此所有命名组的组号都大于未命名的组号
  • 你可以使用(?:exp)这样的语法来剥夺一个分组对组号分配的参与权



有哪些标识可以使用?

  • re.I(re.IGNORECASE): 忽略大小写(括号内是完整写法,下同)
  • re.M(re.MULTILINE): 多行模式,改变'^'和'$'的行为(参见上图),按行匹配,
  • re.S(re.DOTALL): 点任意匹配模式,改变'.'的行为,设置后可以匹配\n,可以匹配到换行符
  • re.L(re.LOCALE): 使预定字符类 \w \W \b \B \s \S 取决于当前区域设定
  • re.U(re.UNICODE): 使预定字符类 \w \W \b \B \s \S \d \D 取决于unicode定义的字符属性
  • re.X(re.VERBOSE): 详细模式。这个模式下正则表达式可以是多行,忽略空白字符,并可以加入注释。
哪些函数支持这些标识?

  • re.compile(pat, string, flag=0)
  • re.findall(pat, string, flag=0)
  • re.match(pat, string, flag=0)
  • re.search(pat, string, flag=0)
其中flag就是使用标识的地方,可以替换为上述的标识,如果要使用多个标识,则格式为:re.I|re.M|re.S|...

-------------------------------------------------------------------------------


re 函数(推荐用regex 修复了re的bug,函数使用都一样):


group():用来提出分组截获的字符串,()用来分组。

group(0),返回匹配的整体

group(1),返回正则表达式中第一个括号(即第一组)内所匹配的部分

...

group(n,m),返回组号为n到m所匹配的字符串,如果组号不存在,则返回indexError异常



gourps():返回所有括号匹配的字符,以tuple格式返回。

m.groups() == (m.group(0), m.group(1), ...)



match(pat, string, flag=0) :只从字符串开始的位置开始匹配,只报告一次成功的匹配,如果不是从开始位置匹配,match()将不报告它。

search(pat, string, flag=0): 将扫描整个字符串,但是只报告它找到的第一个匹配

findall(pat, string, flag=0):将扫描正哥字符串,报告它所匹配的所有字符串,并将它们作为一个列表返回

finditer(pat, string, flag=0):将扫描正哥字符串,报告它所匹配的所有字符串,并将它们作为一个迭代器返回

re.sub(replacement,string[count =0 ]): 替换所有的匹配项,返回一个替换后的字符串,如果匹配失败,返回原字符串

可选参数count是模式匹配后替换的最大次数;count必须是非负整数。缺省值是0表示替换所有的匹配。

re.split(string,[ maxsplit = 0]):你可以通过设置 maxsplit 值来限制分片数。当 maxsplit 非零时,最多只能有 maxsplit 个分片,字符串的其余部分被做为列表的最后部分返回。

re.compile():可以把正则表达式编译成一个正则表达式对象


参考文章:http://www.jb51.net/tools/zhengze.html#mission