Python-正则表达式

来源:互联网 发布:java inputstream 编辑:程序博客网 时间:2024/06/09 20:58

python 中通过正则表达式对字符串进行匹配的时候,需要用到re模块

import re

  • 标准写法:r要写,代表对整个字符串进行转义
  • re.功能(r”正则表达式”,”需要匹配的字符串”或字符串的引用,标志位(可以不写))
  • re.功能(pattern, string, flags) # flags代表标志位,用于控制pattern是否区分大小写,多行匹配等。
r 表示对正则表达式进行转义(避免正则表达式中\使用时混淆)^ 仅匹配整个字符串开头$ 仅匹配整个字符串末尾\b 匹配一个单词结束边界,例如”er\b”匹配”never”中的er\B 匹配非单词结束边界,例如”er\B”匹配”verb”中的er[^X]    匹配非X,^相当于取反,正则默认贪婪,非贪婪加?

匹配分组:

|   匹配左右任意一个表达式(ab)    将括号内的ab作为一个整体\num    引用第num个分组(?P<name>)  分组起名(?p=name)   引用别名name的分组

通配符

.   除”\n”,任意一个字符[]  中括号内任意一个字符\d  数字\D  非数字\s  空白字符,包括空格,Tab键\S  非空白字符\w  字母、数字、_\W  非字母、数字、_

匹配前一个字符多少次:

*   匹配>=0次+   匹配>=1次?   匹配0或1次{m} 匹配m次{m,n}   匹配m到n次

标志位:

re.I    使匹配对大小写不敏感re.S    使.可以匹配\nre.M 多行匹配,影响^和$多个标志位可以写re.S|re.I

RegexObjdct实例的方法和属性

group()  返回匹配的字符串start()  返回匹配开始的下标end() 返回匹配结束的下标span() 返回一个元祖,是匹配(开始,结束)的下标

1 match 完全匹配

默认从字符串开头开始匹配re.match(r”正则表达式”, “字符串”)  # 如果匹配成功,返回的是一个对象;匹配不成功,返回Nonere.match(r”正则表达式”, “字符串”).group()  # 调用group()方法,返回匹配到的内容

2 search 搜索第一个

对整个字符串进行匹配,找到第一个匹配到的内容,将这部分作为对象返回re.search(r”正则表达式”, “字符串”)  # 返回一个对象re.search(r”正则表达式”, “字符串”).group()  # 调用group()方法,返回匹配到的内容re.search(r”正则表达式”, “字符串”).start()  # 返回匹配到内容的起始位置下标

3 findall 查找所有

对整个字符串进行匹配,找到所有匹配到的内容,将这些内容以列表方式返回re.findall(r”正则表达式”, “字符串”)  # 返回一个列表

4 sub 替换

对整个字符串进行匹配,找到所有匹配到的内容,将其替换,并返回替换后的字符串re.sub(r”正则表达式”, “替换内容”, “字符串”,)替换内容可以是一个函数,函数的返回值即是字符串中要替换的元素;这个函数必须将正则匹配后的对象作为参数传入,若要在匹配到的内容上进行修改,则需要调用group()方法获取匹配内容,如果直接修改,则不需要。

5 split 切片

对整个字符串进行匹配,找到所有匹配到的内容,在匹配到的内容左右进行切片,返回一个列表。re.split(r”正则表达式”, “字符串”)  # 返回一个列表

6 compile 封装

将正则表达式进行封装,可以循环使用,减少工作量option = re.compile(r”正则表达式”)调用方法:例如:option.match(“字符串”)In [66]: option = re.compile(r"\d")In [67]: option.findall("a1b2c3")Out[67]: ['1', '2', '3']

7 finditer

是findall的惰性版本,返回的不是列表,是一个生成器,按需生成re.MatchObject实例,如果有很多匹配的话,re.finditer函数能节省大量内存。

In [61]: a = "aaa1aa2aa3aa4aa5aa6"In [62]: b = re.finditer("\d",a)In [63]: next(b)Out[63]: <_sre.SRE_Match object; span=(3, 4), match='1'>In [64]: next(b).group()Out[64]: '2'
原创粉丝点击