正则表达式

import re
text = "apple is $20.09,orange is $100.99"
#ret = re.findall(".*\$\d+\.*\d*", text)
#会找出所有匹配项 以list形式返回
#ret = re.sub("\$","㊙", text,1)
#会替换掉匹配的字符串 第三个参数指定替换掉几个
#ret = re.split("\$", text)
#会以匹配到的字符进行分割
r = re.compile(r"""
.* #匹配任意多个字符
\$ #匹配¥
\d+ #匹配至少一个数字
\.* #匹配. 有或无
\d* #匹配无或多个数字
""",re.VERBOSE)
ret = re.search(r,text)
print(ret.group())

常用的匹配方法

 

 

一个小实践 

from lxml import etree
import requests
from urllib import request
import time
import re
import os
number = 0
def get_page():
    for x in range(1,2):
        url = "https://www.gushiwen.org/default_%s.aspx" %x
        getlistpoem(url)
def getlistpoem(url):
    headers = {
        "User-Agent": "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/80.0.3987.106 Safari/537.36"
    }
    time.sleep(0.4)
    resp = requests.get(url, headers=headers)
    result = resp.text
    # print(result)
    tltles = re.findall(r'<div\sclass="cont">.*?<b>(.*?)</b>',result,re.DOTALL)
    print(tltles)
    tltles2 = re.findall(r'(<div class="cont">\s|</a>\s)<a href=".*?.aspx" target="_blank">(.*?)</a>', result)
    for lists in tltles2:
        a,b = lists
        print(b)
get_page()

 

以上使用的是findall方法,除此之外还有

ret = re.match(r"<div>(.*?)</div>", resp.text,re.DOTALL)

ret.group()

从初始位置匹配

以及

ret = re.search(r"<div>(.*?)</div>", resp.text,re.DOTALL)

ret.group()

从全文匹配

posted @ 2020-02-11 21:57  jswf  阅读(254)  评论(0)    收藏  举报