关于正则表达式:10分钟入门想学爬虫关于正则表达式看这一篇就够了

5次阅读

共计 1325 个字符,预计需要花费 4 分钟才能阅读完成。

最近接触到正则表达式,用于匹配对应的字符串,感觉很神奇,于是开始一个学习。

有句老话说得好:“爬虫写得好,牢范吃得饱。”哈哈哈当然是开个玩笑。

工具举荐

regex101: build, test, and debug regex
这个网站能够帮忙咱们实时地测试 RegExp(正则表达式),前面的教程都在这个平台上进行。

RegEx 中各种符号的用法

要学习 RegEx 首先要学会各种符号的用法。

1. 限定符

限定符仅作用与右边一个字符,或右边的一块表达式。

  • ? 示意能够呈现 0 次或 1 次,也就是可有可无
  • + 示意能够呈现 1 次或屡次
  • * 示意能够呈现任意次
  • {x} 示意必须呈现 x 次,
  • {l, r} 示意呈现次数必须在闭区间 [l, r] 之间,能够省略一个,下界默认为 0,上界默认无穷
    如果我要在一些字符中找出以 a 结尾,以 c 结尾,两头有若干个 b 的字符串,能够像上面这样写:

也能够这样写:

不难发现,后面的这些?+* 都能够用 {} 来表白,不过为了不便就会用后面的示意。

2.“或”运算

在简直所有编程语言中都有或运算来示意一个不太好一步示意的逻辑汇合,在 RegExp 中也能够。

符号:| 能够将左右两个表达式取并集作为新的表达式,但优先级低于表达式的拼接

比方我要失去所有的 a 和 an,就能够像上面这样写。留神两边要用括号和 \b 包围起来,\b 确保这是一个单词而不是一个单词的一部分,括号是为了避免把 ”\ba” 和 ”an\b” 作为两个表达式,咱们的表达式应该是 a 和 an。

3. 字符类

格局:[abc]示意这一位能够是 abc 中的任意字符,也能够用区间来示意,比方 [a-z] 示意这一位能够是一个小写字母,[a-zA-Z0-9]+ 示意这里能够是一个或多个“大写字母或小写字母或数字”。

举个例子,我要匹配所有格局为 ” 班级 + 学号 ” 中找出所有 zy02 班的人,能够像下图这样做。

如果要找出所有 jsj1 班到 3 班的,能够像上面这样做。

这里的 \d 和 [0-9] 等价。值得注意的是这里的非法学号 jsj0100 没有被匹配到。

也能够在 [] 的结尾增加一个 ^ 字符,示意排除。

4. 元字符

  • \d 示意数字
  • \D 示意非数字
  • \w 示意字母、数字和下划线
  • \W 示意非字母、数字和下划线
  • \s 示意空白字符
  • \S 示意非空白字符
  • ^ 匹配行首
  • $ 匹配行尾

5. 贪心匹配与懈怠匹配

RegExp 默认匹配模式为贪心匹配,也就是尽可能长。

如果我在一段 HTML 中想要匹配出每一个 <> 标签,如果像上面这样写,会把整个文档作为一个长字符串匹配。

这显然不是咱们想要的后果,咱们就能够利用? 来改为懈怠匹配。

修饰符

援用一段菜鸟教程的文章《正则表达式 – 修饰符(标记)| 菜鸟教程》,间接偷懒一手。

个别会用 /g,示意 global 全局搜寻。

在 Python 中应用 RegEx

python 须要先引入 re 库,这是一个很弱小的字符串匹配库。

咱们利用 re.search(pattern, string[, flags])来做匹配,会返回一个后果组成的元组,如果没找到返回 None,罕用于判断。

如果我要在 python 中辨认一段式子是一个正数,还是一个表达式时,能够这样匹配:

再举个例子,如果我要在一段 html 中找出所有 a 标签,能够像上面这样做,,re.findall 返回一个 list。

本文完结啦,感激大家的浏览,如果本文对你有用的话欢送点赞珍藏和关注!

正文完
 0