本篇内容主要讲解“如何使用Python的正则表达式”,感兴趣的朋友不妨来看看。本文介绍的方法操作简单快捷,实用性强。下面就让小编来带大家学习“如何使用Python的正则表达式”吧!
1.学习爬虫,为什么必须会正则表达式?
有时候,我们爬取一些网页具体内容时,会发现我们只需要这个网页某个标签的一部分内容,或者是这个标签的某个属性的值时,用普通的 xpath 或者css.selector是不能实现我们的想法的,这个时候就必须用到正则表达式去匹配获取。
2.正则表达式官方简介?
正则表达式,又称规则表达式。(英语:Regular Expression,在代码中常简写为regex、regexp或RE),计算机科学的一个概念。正则表达式通常被用来检索、替换那些符合某个模式(规则)的文本。
day01:
1'''
2author : 极简XksA
3date : 2018.7.27
4goal : 正则表达式
5'''
6
7import re
8
9line = 'jijianXksA123'1011# ^a 表示匹配以a开头的字符串(只匹配一次)12# . 表示该字符可为任意字符(只匹配一次)13# * 表示前面的字符可以出现任意次(0次或多次)(多次匹配)14reg_str01 = '^j.*' # 表示以j开头的字符串15# re.match 函数16# 第一个参数是匹配的格式17# 第二参数是要匹配的字符串18# 返回值为:匹配成功,返回match对象,否则返回:None1920if re.match(reg_str01,line) :21 print("匹配成功!") # reg_str = '^j.*' 匹配成功22else:23 print("匹配失败!") # reg_str = '^i.*' 匹配失败242526# 23$ 表示匹配以23结尾的字符串(只匹配一次)27reg_str02 = '^j.*23$'28if re.match(reg_str02,line) :29 print("匹配成功!") # reg_str = '^j.*23$' 匹配成功30else:31 print("匹配失败!") # reg_str = '^j.*13$' 匹配失败323334line01 = 'boooboaobxby'35# () 内的为 匹配模式,通过 group函数 可以取出匹配结果36# 正则表达式贪婪匹配模式:从后面(右边)开始匹配37reg_str03 = '.*(b.*b).*'38test01 = re.match(reg_str03,line01)39if test01:40 print(test01.group(1)) # result : bxb41else:42 print("匹配失败!")4344# 正则表达式非贪婪匹配模式:从前面(左边)开始匹配45# ? : 表示从左边开始匹配,匹配到第一个符合模式的内容,即进入模式46#47reg_str03 = '.*?(b.*b).*' # 半贪婪匹配48reg_str04 = '.*?(b.*?b).*' # 非贪婪匹配49test01 = re.match(reg_str03,line01)50test02 = re.match(reg_str04,line01)51if test01 and test02:52 print(test01.group(1)) # result : boooboaobxb53 print(test02.group(1)) # result : booob54else:55 print("匹配失败!")
day02:
1'''
2author : 极简XksA
3date : 2018.7.28
4goal : 正则表达式
5'''
6import re
7line01 = 'boooboaobcxby'
8
9def regtest(reg_str,line = line01):10 test = re.match(reg_str, line)11 if test:12 print(test.group(1))13 else:14 print("匹配失败!")1516# + :表示前面的字符,至少出现一次17reg_str04 = '.*(b.+b).*' # (b.+b)表示b与b之间至少有一个字符18regtest(reg_str04) # result : bcxb1920# {n} : 控制前面字符出现次数21# a{2} : 表示a出现两次22# b{3,4} : 表示b至少出现3次,最多出4次23# c{4,} : 表示c至少出现4次24reg_str05 = '.*(b.{2}b).*' # (b.{2}b)表示匹配到的b与b之间,只有两字符25reg_str06 = '.*(b.{3,4}b).*' # (b.{3,6}b)表示匹配到的b与b之间,至少有3个字符,至多有4个字符26reg_str07 = '.*(b.{4,}b).*' # (b.{8,}b)表示匹配到的b与b之间,至少有4个字符27regtest(reg_str05) # result : bcxb28regtest(reg_str06) # result : boaob29regtest(reg_str07) # result : boaobcxb3031# | :表示 或32# (abc|123) : 表示匹配到 abc 或者 123,都算匹配成功33reg_str08 = '.*(boo|abc)'34reg_str09 = '.*(abc|boo)'35regtest(reg_str08) # result : boo36regtest(reg_str09) # result : boo3738# [] : 表示 里面包含的内容都可以进行匹配,包含内容只有表面字符含义39# [abcd] : 表示 只要这个字符为 a/b/c/d中的一个都可以匹配成功40# [0-9] : 表示 只要这个字符在 0-9 这个区间内,都可以匹配成功41# [^x] : 表示匹配 字符不为 x42line02 = '电话号:15573563467'43reg_str10 = '.*(1[3458][0-9]{9}).*'44reg_str11 = '.*(1[3458][^1]{9}).*'45regtest(reg_str10,line02) # result : 1557356346746regtest(reg_str11,line02) # result : 155735634674748# \s 表示匹配空格,匹配一次49# \S 表示匹配不是空格的字符,匹配一次50# \w 表示匹配 A-Z、0-9、_ 中的容易字符,匹配一次51# \W 与 \w 相反52# \d 表示数字53# [\u4E00-\u9FA5] : 表示所有汉字,unicode 编码5455def regtest_test(reg_str,line = line01):56 test = re.match(reg_str, line)57 if test:58 print(test.group(1)+':'+test.group(2)+'-'+test.group(3)+'-'+test.group(4))59 else:60 print("匹配失败!")6162# 简单实例63str01 = '张三出生于1997年12月20日'64str02 = '李四出生于1989-01-20'65str03 = '王五出生于1997/2/5'66str04 = '赵六出生于1997.12.20'67str = [str01,str02,str03,str04]68# 提取出姓名+出生日期69# 匹配模式70reg_str12 = '(.*)出生于(\d{4})[.年/-](\d{1,2})[.月/-](\d{1,2}).*?'71for i in range(4):72 regtest_test(reg_str12,str[i])73# result :74# 张三:1997-12-2075# 李四:1989-01-2076# 王五:1997-2-577# 赵六:1997-12-20
到此,相信大家对“如何使用Python的正则表达式”有了更深的了解,不妨来实际操作一番吧!这里是亿速云网站,更多相关内容可以进入相关频道进行查询,关注我们,继续学习!
亿速云「云服务器」,即开即用、新一代英特尔至强铂金CPU、三副本存储NVMe SSD云盘,价格低至29元/月。点击查看>>
免责声明:本站发布的内容(图片、视频和文字)以原创、转载和分享为主,文章观点不代表本网站立场,如果涉及侵权请联系站长邮箱:is@yisu.com进行举报,并提供相关证据,一经查实,将立刻删除涉嫌侵权内容。
原文链接:http://blog.itpub.net/31556503/viewspace-2216248/