常用字符
| 字符 | 功能 |
|---|---|
| \d | 数字 |
| \w | 数字或字母 |
| . | 任意单个字符(除了换行符) |
| * | 零个或多个字符 |
| + | 至少一个字符 |
| ? | 零个或一个字符 |
| {n} | 前面的表达式匹配n次 |
| {n,m} | |
| \s | 匹配一个空格 |
| \ | 转义字符 |
| | | 或 |
| ^ | (匹配一行字符串的开头)^\d以数字开头 |
| $ | (匹配一行字符串的结尾)\d$以数字结尾 |
| [0-9a-zA-z\_] | 一个数字,字符或下划线 |
| [0-9a-zA-z\_]+ | 如'a100','0_Z','Py3000'等等 |
| \A | 匹配字符串的开头 |
| \Z | 匹配字符串的结尾 |
| .* | 贪婪匹配 |
| .*? | 非贪婪匹配(在结尾时可能不会匹配) |
下划线是特殊字符需要转义
字母大写代表与小写意思相反
使用r’…’可以规避特殊字符
re库
match()
会从字符串的开头进行匹配,成功返回Match对象;失败返回None.
1 | re.match(正则表达式,字符串,[修饰符]) |
1 | content = 'hello, 122323 world _ this is a regex demo' |
1 | content = 'http://weibo.com/comment/KERGCN' |
1 | with open('./no_info.txt', 'r') as f: |
修饰符
| 修饰符名 | 功能 |
|---|---|
| re.I | 匹配对大小写不敏感 |
| re.L | |
| re.M | |
| re.S | 使.匹配任意字符 |
| re.U | |
| re.S |
search()
从字符串中寻找是否有匹配的片段;然后返回第一个匹配的结果
要注意绝大部分的html文本都会包含大量的换行符,所以尽量加上re.S修饰符,避免出现匹配不到的问题
compile()
用于把一个反复用的正则表达式生成对象
1 | pattern = re.compile(regex) |
其它方法
re.findall()
1 | re.findall(patter, string, flag=0) # 返回列表 |
re.split()
1 | re.split(pattern, string, maxsplit=0, flag=0) |
re.finditer()
1 | results = re.finditer(pattern, string, flag=0) # 生成正则表达式匹配结果的生成器 |
re.sub()
1 | re.sub(pattern, repl, string, count=0, flags=0) |
分组
使用()
1 | result.group(0) # 获取的是原字符串 |
贪婪匹配
正则表达式默认都是尽可能多的匹配
非贪婪匹配
在后面加一个?
/d+?
.*?
实例
1 | 'a b c'.split(' ') |
1 | re.split(r'[\s\,]+', 'a,b, c d') |
1 | re.split(r'[\s\,\;]+', 'a,b;; c d') |
1 | re.match(r'^(\d+)(0*)$', '102300').groups() |
1 | re.match(r'^(\d+?)(0*)$', '102300').groups() |