正規表示式

2022-05-18 07:52:23 字數 4477 閱讀 7027

在python中正規表示式庫需要匯入re庫

import re
正規表示式需要使用原生字串來表達, 原生字串(raw shtring)在普通的字串前面加 r 表示

search(pattern, string, flags=0)

search用於在字串中搜尋, 並且返回第乙個位置的match物件

pattern: 正規表示式字串

string: 待匹配的字串

flags: 控制標記

re.i 忽略大小寫

re.m ^能夠將每行當做匹配的開始

re.s 能夠匹配所有字元 (正常.只能匹配出換行以外的所有)

match(pattern, string, flahs=0)

從字串開始匹配,是匹配, 如果不匹配的話就返回none, 匹配返回match物件

三個引數與search()相同

findall(pattern, string, flahs=0)

與search()不同, findall()會查詢到所有滿足匹配的, 且返回匹配的字串形成的列表

三個引數與search()相同

split(pattern, string, maxsplit=0, flags=0)

是根據正規表示式來分割字串, 形成乙個列表返回

相同三個引數用法不變

maxsplit: 是最大分割數, 超過之後會吧剩餘的作為乙個元素輸出

finditer(pattern, string, flahs=0)

功能與findall()一致, 只是返回迭代器內含match物件

三個引數與search()相同

sub(pattern, repl, string, count, flahs=0)

將匹配成功的字串替換成repl

相同三個引數用法不變

repl: 替換成的字串

count: 最大替換次數

subn(pattern, repl, string, count, flahs=0)

這個功能引數都和sub()相同, 只是結果是乙個元組, 第乙個元素是結果, 第二個元素是替換的次數

主要, re庫的等價形式:

>>> rst = re.search(r'

[1‐9]\d

', '

bit 100081

')

等同於

>>> pat = re.compile(r'

[1‐9]\d')

>>> rst = pat.search('

bit 100081

')

如果利用compile()方法的話, 上述的方法就少寫第乙個引數

match有以下屬性

match物件的方法 

在預設的情況下, python的正則匹配是貪婪匹配, 但是也有用的到最少匹配的情況, 此時需要使用?來標識

具體形式如下

通過正規表示式匹配**網頁, 來獲取商品**和商品名稱

觀察**頁面發現後面緊跟搜尋關鍵字

在url之後還有個&s表示翻頁

觀察具體頁面

因而獲得的商品名稱和**就可以通過正規表示式獲取

具體**如下

import requests

import re

def gethtmltext(url):

try:

r = requests.get(url, timeout=30)

r.raise_for_status()

return r.text

except:

return ""

def parsepage(ilt, html):

try:

plt = re.findall(r'\"view_price\"\:\"[\d\.]*\"', html)

tlt = re.findall(r'\"raw_title\"\:\".*?\"', html)

for i in range(len(plt)):

price = eval(plt[i].split(':')[1])

title = eval(tlt[i].split(':')[1])

except:

print("")

def printgoodslist(ilt):

tplt = "\t\t"

print(tplt.format("序號", "**", "商品名稱"))

count = 0

for g in ilt:

count = count + 1

print(tplt.format(count, g[0], g[1]))

def main():

goods = '書包'

depth = 3

start_url = '' + goods

infolist =

for i in range(depth):

try:

url = start_url + '&s=' + str(44 * i)

html = gethtmltext(url)

parsepage(infolist, html)

except:

continue

printgoodslist(infolist)

main()

例項二: 通過re庫獲得京東商品的**, 通過beautifulsoup來獲取商品資訊

京東的鏈結位址為: 

後面輸入的關鍵字由於編碼原因最好使用英文關鍵字如notebook等

經過分析頁面處理, 有

具體原始碼為

#!/usr/bin/env python3

# -*- coding: utf-8 -*-

__author__ = 'weihuchao'

import re

import requests

from bs4 import beautifulsoup

import bs4

def geturl(url):

try:

r = requests.get(url, timeout=30)

r.raise_for_status()

return r.text

except:

print("獲取網頁失敗")

def getinfo(nlist, plist, content):

soup = beautifulsoup(content, "html.parser")

ptl = re.findall(r'data-price=\"[0-9.]*\"', content)

for item in ptl:

price = eval( item.split('=')[1] )

for lis in soup.find('ul', attrs=).children:

if isinstance(lis, bs4.element.tag):

name = lis.find('a').attrs['title']

def printlist(nlist, plist):

tpl = "\t\t"

print(tpl.format("序號", "商品名稱", "**"))

alllist = zip(nlist, plist)

count = 0

for item in alllist:

count += 1

print(tpl.format(count, item[0], item[1]))

def main():

nlist, plist = ,

keyword = "mac"

url = "" + keyword

content = geturl(url)

getinfo(nlist, plist, content)

printlist(nlist, plist)

if __name__ == "__main__":

main()

正規表示式 正規表示式 總結

非負整數 d 正整數 0 9 1 9 0 9 非正整數 d 0 負整數 0 9 1 9 0 9 整數 d 非負浮點數 d d 正浮點數 0 9 0 9 1 9 0 9 0 9 1 9 0 9 0 9 0 9 1 9 0 9 非正浮點數 d d 0 0 負浮點數 正浮點數正則式 英文本串 a za z...

正規表示式 表示式

網域名稱 a za z0 9 a za z0 9 a za z0 9 a za z0 9 interneturl a za z s 或 http w w w 手機號碼 13 0 9 14 5 7 15 0 1 2 3 5 6 7 8 9 18 0 1 2 3 5 6 7 8 9 d 號碼 x x x...

Linux正規表示式 編寫正規表示式

為了所有實用化的用途,你可以通過使用程式產生正確的結果。然而,並不意味著程式總是如你所願的那樣正確地工作。多數情況下,如果程式不能產生想要的輸出,可以斷定真正的問題 排除輸入或語法錯誤 在於如何描述想要的東西。換句話說,應該考慮糾正問題的地方是描述想要的結果的表示式。表示式不完整或者公式表示得不正確...