当我开始对爬虫下手的时候心情是这样的
信心满满打开了教程,,看到第一节“正则表达式”
md 不会正则表达式学么爬虫!!!
盘他!
正则表达式是干啥用的,简单的讲就是需要在众多的信息中过滤出来自己需要的信息
我整了张表,请看
表一:通用字符
import re
# 导包
string = "I like python 2020_3_21"
# 定义演示字符串
expression = "\d"
# 正则表达式
print("\d演示:")
print(re.search(expression, string)
# search 函数从任意地方开始匹配
# 匹配不到就是NUll
----------------------------------------------
\d演示:
<re.Match object; span=(14, 15), match='2'>
-----------------------------------------------
表二:原子表[ ]
# 这个比如手机号
string = "17642587523"
expression = "[1][1-9][^123]"
# 即 第一位是1,第二位是1-9之间 第三位可以看到有个上三角,意味就是非,即不在1-3中
print(re.search(expression, string))
----------------------------------------
<re.Match object; span=(0, 3), match='176'>
表三:元字符
这一部分比较难理解来看一个例子
# 1.取出python
string = "I like python 2020_3_21"
expression = "^I.*(p.*)\s.*1$"
# ^不在原子表中,代表从头开始,^I 也就是说从I开始,.任意一个字符,不包含\r\n\t
# * 可以出现0次,1次,多次, .*就是任意个字符 ()需要匹配的放在里面 后面的就好理解l了吧
a = re.match(expression, string)
print(a.group(1))
--------------------------------------
python
--------------------------------------
插入两个概念:贪婪匹配跟懒惰匹配
string = "pythony"
expression = "^p.*y"
print(re.search(expression, string))
-------------------------------------
<re.Match object; span=(0, 7), match='pythony'>
-------------------------------------
# 这个就是贪婪匹配,,,怎么匹配到最后 的y 看下面两个概念
"""
贪婪匹配:尽可能多的去匹配
懒惰匹配:少的匹配
"""
string = "pythony"
expression = "^p.*?y"
print(re.search(expression, string))
# 不难发现我们在.* 后面加了一个? 这个就是懒惰匹配
------------------------------------------
<re.Match object; span=(0, 2), match='py'>
------------------------------------------
表四:模式修正
string = "Python"
expression = "py"
print(re.search(expression, string, re.I))
------------------------------------------
<re.Match object; span=(0, 2), match='Py'>
是不是有点,蒙圈!!!
还有几个函数需要了解一下啊
re.match()
# 该方法只能从开头开始查,如果查找的内容不是开头或者不存在时,返回值为None
re.search()
# 该方法与上述方法类似,不过该方法查找的范围是全部内容,但返回只返回查找到的第一个,验证方法同上。
re.sub()
# 该方法默认全文替换,可以指定替换次数,如果查找的内容不存在时,将返回原字符串。
re.Fullmatch()
# 该方法与match类似,只不过,该方法搜索的匹配内容必须和搜索的原文一样,否则都认为是未找到。
re.Findall()
# 该方法不需要通过group方法进行验证,找不到时返回一个空列表。