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

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

工具举荐

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。

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