正则表达式(regular expression)的含义:
描述了一种字符串匹配的模式(pattern),可以用来检查一个串是否含有某种子串、将匹配的子串替换或者从某个串中取出符合某个条件的子串等。正则表达式并不局限于python,各个语言之间都是通用的,所以十分重要,在聚焦爬虫的数据解析中会用到。
由于在pycharm中运行起来有点麻烦,还需要输入代码,因此我使用在线验证网站:https://regex101.com/
打开后是这样的:
我们选择->
此处的r是为了保留原格式,防止转义
正则表达式的常见特殊元字符有以下几个:
. * ? [ ] ^ $ { } | ( )
以下将逐一讲解
点-匹配所有字符(.)
.
表示要匹配除了换行符之外的任何单个字符。
例如,以下的文本中,我们想要提取出所有的颜色。
苹果,是绿色的
橙子,是橙色的
香蕉,是黄色的
乌鸦,是黑色的
要提取出所有的颜色,那就是把“色”字之前的一个字符取到即可,那么我们可以这么做:
匹配到的结果会高亮显示,或者看旁边的匹配信息
在pycharm中可以这么写:
代码语言:javascript复制import re #导入模块
msg = """苹果,是绿色的
橙子,是橙色的
香蕉,是黄色的
乌鸦,是黑色的"""
result = re.findall(r".色", msg, re.M) #re.M的作用是多行模式,可以逐行匹配,否则就是全文匹配
print(result)
结果:
['绿色', '橙色', '黄色', '黑色']
星号-重复匹配任意次(*)
*
表示匹配前面的子表达式任意次,包括0次。
文本:
苹果,绿色的
橙子,橙色的
香蕉,黄色的
乌鸦,黑色的
猴子,
现在你要从下面的文本中,选择每行逗号后面的字符串内容,包括逗号本身。注意,这里的逗号是中文的逗号。
我们只需:
注意,此处的猴子后面的逗号也被匹配到了,因为0次也会匹配。
而“ ”和“*”的不同就在于“ ”匹配的次数大于等于1次,也就是说至少要有一次:
可见猴子后面的逗号没有被匹配到。
问号-匹配0-1次
?表示匹配前面的子表达式0次或1次
我们前面的*和 都是贪婪匹配,也就是尽可能多次的匹配,而?就是非贪婪匹配,请看下面的例子:我们想把<>以及里面的内容提取出来
这样匹配了全文
这样才是我们想要的结果
如果使用贪婪匹配,则会把所有的<>都匹配到,从头到尾读匹配到。
花括号-匹配指定次数 { }
{m}表示匹配m次
{m,}表示匹配大于m次
{m,n}表示匹配 m<=次数<=n次
未完待续 剩下的写正则难点