常用正则表达式
字符 | 描述 |
---|---|
\d | 代表任意数字,就是阿拉伯数字 0-9 这些玩意。 |
\D | 大写的就是和小写的唱反调,\d 你代表的是任意数字是吧?那么我 \D 就代表不是数字的。 |
\w | 代表字母,数字,下划线。也就是 a-z、A-Z、0-9、_。 |
\W | 跟 \w 唱反调,代表不是字母,不是数字,不是下划线的。 |
\n | 代表一个换行。 |
\r | 代表一个回车。 |
\f | 代表换页。 |
\t | 代表一个 Tab 。 |
\s | 代表所有的空白字符,也就是上面这个:\n、\r、\t、\f。 |
\S | 跟 \s 唱反调,代表所有不是空白的字符。 |
\A | 代表字符串的开始。 |
\Z | 代表字符串的结束。 |
^ | 匹配字符串开始的位置。 |
$ | 匹配字符创结束的位置。 |
. | 代表所有的单个字符,除了 \n \r |
[…] | 代表在 [] 范围内的字符,比如 [a-z] 就代表 a到z的字母 |
[^…] | 跟 […] 唱反调,代表不在 [] 范围内的字符 |
{n} | 匹配在 {n} 前面的东西,比如: o{2} 不能匹配 Bob 中的 o ,但是能匹配 food 中的两个o。 |
{n,m} | 匹配在 {n,m} 前面的东西,比如:o{1,3} 将匹配“fooooood”中的前三个o。 |
{n,} | 匹配在 {n,} 前面的东西,比如:o{2,} 不能匹配“Bob”中的“o”,但能匹配“foooood”中的所有o。 |
* | 和 {0,} 一个样,匹配 * 前面的 0 次或多次。 比如 zo* 能匹配“z”、“zo”以及“zoo”。 |
+ | 和{1,} 一个样,匹配 + 前面 1 次或多次。 比如 zo+”能匹配“zo”以及“zoo”,但不能匹配“z”。 |
? | 和{0,1} 一个样,匹配 ?前面 0 次或 1 次。 |
a | b |
() | 匹配括号里面的内容。 |
re库
如果我们想要从
muyang has 100 bananas
拿到100这个数字
我们就可以
import re
content = 'muyang has 100 bananas'
res = re.match('^mu.*(\d+)\s.*s$',content)
print(res.group(1))
()的意思表示 我们需要的东西
那么如果我们想要 100 这个数字呢?
import re
content = 'muyang has 100 bananas'
res = re.match('^mu.*?(\d+)\s.*s$',content)
print(res.group(1))
看出有什么区别吗?
多了一个?
在这里呢,涉及到两个概念
一个是:贪婪匹配
另一个是:非贪婪匹配
所谓贪婪匹配
就是我们的第一段代码
一个数一个数都要去匹配
而非贪婪呢
我们是直接把 100 给匹配出来了
刚才我们用到了.*?
是我们在匹配过程中最常使用到的
表示的就是匹配任意字符
但是
.*?的 . 代表所有的单个字符,除了 \n \r
如果我们的字符串有换行了
怎么办呢?
比如这样
content = """muyang has 100
bananas"""
直接用 re.S 就可以了
import re
content = """muyang has 100
bananas"""
res = re.match('^mu.*?(\d+)\s.*s$',content,re.S)
print(res.group(1))
re.search
它会直接去扫描字符串
然后把匹配成功的第一个结果的返回给你
import re
content = """muyang has 100
bananas"""
res = re.search('mu.*?(\d+)\s.*s',content,re.S)
print(res.group(1))
这样我们可以获取到100
但是如果我们的内容是
content = """muyang has 100 bananas;
muyang has 100 bananas;
muyang has 100 bananas;
muyang has 100 bananas;"""
想要获取所有的 100 呢?
这时候就要用到 re 的另一个方法了
re.findall
通过它我们就能轻松的获取所有匹配的内容了
import re
content = """muyang has 100 bananas;
muyang has 100 bananas;
muyang has 100 bananas;
muyang has 100 bananas;"""
res = re.findall('mu.*?(\d+)\s.*?s;',content,re.S)
print(res)
教程地址
B站教程链接: https://www.bilibili.com/video/BV1gK4y1R7Ha?p=5.
python爬虫加群交流:820541914