写爬虫,不会正则怎么行?

导读:正则在各语言中的使用是有差异的,本文以 Python 3 为基础。本文主要讲述的是正则的语法,对于 re 模块不做过多描述,只会对一些特殊地方做提示。

很多人觉得正则很难,在我看来,这些人一定是没有用心。其实正则很简单,根据二八原则,我们只需要懂 20% 的内容就可以解决 80% 的问题了。我曾经有几年几乎每天都跟正则打交道,刚接手项目的时候我对正则也是一无所知,花半小时百度了一下,然后写了几个 demo,就开始正式接手了。三年多时间,我用到的正则鲜有超出我最初半小时百度到的知识的。

1、正则基础 1.1、基础语法

(1)常用元字符

语法 描述
\b   匹配单词的开始或结束  
\d   匹配数字  
\s   匹配任意不可见字符(空格、换行符、制表符等),等价于[ \f\n\r\t\v]。  
\w   匹配任意 Unicode 字符集,包括字母、数字、下划线、汉字等  
.   匹配除换行符(\n)以外的任意字符  
^ 或 \A   匹配字符串或行的起始位置  
$ 或 \Z   匹配字符串或行的结束位置  

(2)限定词(又叫量词)

语法 描述
*   重复零次或更多次  
+   重复一次或更多次  
?   重复零次或一次  
{n}   重复 n 次  
{n,}   重复 n 次或更多次  
{n,m}   重复 n 到 m 次  

(3)常用反义词

语法 描述
\B   匹配非单词的开始或结束  
\D   匹配非数字  
\S   匹配任意可见字符, [^ \f\n\r\t\v]  
\W   匹配任意非 Unicode 字符集  
  除 a、b、c 以外的任意字符  

(4)字符族

语法 描述
[abc]   a、b 或 c  
  除 a、b、c 以外的任意字符  
[a-zA-Z]   a 到 z 或 A 到 Z  
[a-d[m-p]]   a 到 d 或 m 到 p,即 [a-dm-p](并集)  
[a-z&&[def]]   d、e 或 f(交集)  
[a-z&&[^bc]]   a 到 z,除了 b 和 c:[ad-z](减去)  
[a-z&&[^m-p]]   a 到 z,减去 m 到 p:[a-lq-z](减去)  

以上便是正则的基础内容,下面来写两个例子看下:

s = '123abc你好'
re.search('\d+', s).group()
re.search('\w+', s).group()

结果:

123
123abc你好

是不是很简单?

写爬虫,不会正则怎么行?

1.2、修饰符

修饰符在各语言中也是有差异的。

Python 中的修饰符:

修饰符 描述
re.A   匹配 ASCII字符类,影响 \w, \W, \b, \B, \d, \D  
re.I   忽略大小写  
re.L   做本地化识别匹配(这个极少极少使用)  
re.M   多行匹配,影响 和  
re.S   使 . 匹配包括换行符(\n)在内的所有字符  
re.U   匹配 Unicode 字符集。与 re.A 相对,这是默认设置  
re.X   忽略空格和 # 后面的注释以获得看起来更易懂的正则。  

(1)re.A

修饰符 A 使 \w 只匹配 ASCII 字符,\W 匹配非 ASCII 字符。

s = '123abc你好'
re.search('\w+', s, re.A).group()
re.search('\W+', s, re.A).group()

结果:

123abc
你好

内容版权声明:除非注明,否则皆为本站原创文章。

转载注明出处:https://www.heiqu.com/zyjjyy.html