python爬虫01:正则表达式

python爬虫正则表达式


正则表达式离不开re库

1.特殊字符

  1. ^必须以某个字符开头 / $必须以某个字符结尾 / *匹配多次
import re
line = "asshole123"
pat01 = "^a.*"
'''从a开头,任意字符,匹配多次'''
pat02 = "^h.*"
pat03 = ".*3$"
'''任意字符,重复多次,以3结尾'''

if re.match(pat01, line):
    print("ok")
if re.match(pat02, line):
    print("okkk")
if re.match(pat03, line):
    print("okkkkk")
ok
okkkkk
  1. ?非贪婪匹配
line02 = "assholehole_he123"
'''注意如果什么都不加默认贪婪匹配,贪婪匹配是反向匹配的'''
pat04 = ".*(h.*e).*"
'''加问号之后从左边开始匹配,把从第一个h到最后一个e的内容提取出来了'''
pat05 = ".*?(h.*e).*"
'''第一个?属于h,第二个?属于e,两个都选择非贪婪模式'''
pat06 = ".*?(h.*?e).*"

match_obj01 = re.match(pat04, line02)
if match_obj01:
    print(match_obj01.group(1))
'''注意要group(1)才是小括号提取出来的group(0)仍然是整个字符串'''

match_obj01 = re.match(pat05, line02)
if match_obj01:
    print(match_obj01.group(1))
    
match_obj01 = re.match(pat06, line02)
if match_obj01:
    print(match_obj01.group(1))
he
holehole_he
hole
  1. +出现至少一次 / {2}出现两次 / {2,}出现至少两次 / {2,5}出现2-5次
line03 = "assssssshole"
pat07 = ".*(s.+h).*"
'''加号属于前一位字符,前一位字符至少出现一次'''
pat08 = ".*(s.{4}h).*"

match_obj01 = re.match(pat07, line03)
if match_obj01:
    print(match_obj01.group(1))
match_obj01 = re.match(pat08, line03)
if match_obj01:
    print(match_obj01.group(1))
ssh
sssssh
  1. | 或 / 中括号[] / 小括号()
line04 = "asshole9527"
pat09 = "((assshole|[a-e]sshole)9527)"
'''先满足左边,不行再看右边'''
'''中括号内是只要满足任意一个字符都可匹配'''
'''中括号里可以写区间[0-9]或[a-zA-Z0-9]'''
'''中括号内的^表示非,[^1]不等于1,其他如.*都没有含义了'''

match_obj01 = re.match(pat09, line04)
if match_obj01:
    print(match_obj01.group(1))
    print(match_obj01.group(2))
    '''第二个是内层小括号,嵌套'''
asshole9527
asshole
  1. \s空格 / \S不能为空格 / \w
line05 = "全 员 恶 人"
pat10 = "全\s员\s恶\s人"
match_obj01 = re.match(pat10, line05)
if match_obj01:
    print(match_obj01.group(0))
全 员 恶 人

\w == [a-zA-Z0-9_] \W 与小w相反

  1. [\u4E00-\u9FA5] 汉字 / \d数字
line06 = "this is 同济大学"
pat11 = ".*?([\u4E00-\u9FA5]+大学)"
match_obj01 = re.match(pat11, line06)
if match_obj01:
    print(match_obj01.group(1))
同济大学

2.简单应用及示例

哈哈哈哈哈哈哈

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值