正则
爬虫技术中必不可少的技能
re.search
查找返回第一个匹配结果
参数 | 描述 |
---|---|
pattern | 正则 |
string | 匹配字符串 |
flags | 控制匹配方式:区分大小写,多行匹配等 |
返回对象
可调 | 描述 |
---|---|
.span() | 匹配到(起始位置,结束位置) |
.group(num=0) | 匹配到的所有结果 |
.group(1) | 括号把匹配结果分成多个组,打印指定组,如下例子 |
例
'''正则表达式中的三组括号把匹配结果分成三组'''
a = "123abc456"
print re.search("([0-9]*)([a-z]*)([0-9]*)",a).group(0) #123abc456,返回整体
print re.search("([0-9]*)([a-z]*)([0-9]*)",a).group(1) #123
print re.search("([0-9]*)([a-z]*)([0-9]*)",a).group(2) #abc
print re.search("([0-9]*)([a-z]*)([0-9]*)",a).group(3) #456
re.match
match 尝试从字符串的起始位置匹配一个模式,如果不是起始位置匹配成功的话,match()就返回none。
re.sub
查找替换
re.sub(pattern, repl, string, count=0, flags=0)
参数 | 描述 |
---|---|
pattern | 正则中的模式字符串 |
repl | 替换的字符串,也可为一个函数 |
string | 要被查找替换的原始字符串 |
count | 模式匹配后替换的最大次数,默认 0 表示替换所有的匹配。 |
flags
参数 | 描述 |
---|---|
re.I | 使匹配对大小写不敏感 |
re.L | 表示特殊字符集 \w, \W, \b, \B, \s, \S 依赖于当前环境 |
re.M | 多行匹配,影响 ^ 和 $ |
re.S | 使 . 匹配包括换行在内的所有字符 |
re.U | 表示特殊字符集 \w, \W, \b, \B, \d, \D, \s, \S 依赖于 Unicode |
re.X | 为了增加可读性,忽略空格和 # 后面的注释 |
re.findall
在字符串中找到正则表达式所匹配的所有子串,并返回一个列表,如果没有找到匹配的,则返回空列表。
注意: match 和 search 是匹配一次 findall 匹配所有。
import re
pattern = re.compile(r'\d+') # 查找数字
result1 = pattern.findall('runoob 123 google 456')
result2 = pattern.findall('run88oob123google456', 0, 10)
print(result1)
print(result2)
['123', '456']
['88', '12']
re.finditer
和 findall 类似,在字符串中找到正则表达式所匹配的所有子串,并把它们作为一个迭代器返回。
import re
it = re.finditer(r"\d+","12a32bc43jf3")
for match in it:
print (match.group() )
12
32
43
3
匹配任意字符串
用
.*?
并不能匹配所有字符串,在遇到换行的时候,就匹配不到的,如果要匹配包含/n
的字符串 请用
[\s\S]*?
匹配非 字符串开头
[^-](.....)
上面是匹配非-
开头的方法
匹配html 页面
text = re.sub("<.*?[\s+]?.*?[\s+]?.*?[\s+]?.*?[\s+]?.*?>", "", text)
text = (re.sub("\s", "", text)).replace(' ', '')