導航:首頁 > 編程語言 > pythonre例子

pythonre例子

發布時間:2022-11-13 08:10:03

① 誰用過python中的re來抓取網頁,能否給個例子,謝謝

這是我寫的一個非常簡單的抓取頁面的腳本,作用為獲得指定URL的所有鏈接地址並獲取所有鏈接的標題。

===========geturls.py================
#coding:utf-8
import urllib
import urlparse
import re
import socket
import threading

#定義鏈接正則
urlre = re.compile(r"href=[\"']?([^ >\"']+)")
titlere = re.compile(r"<title>(.*?)</title>",re.I)

#設置超時時間為10秒
timeout = 10
socket.setdefaulttimeout(timeout)

#定義最高線程數
max = 10
#定義當前線程數
current = 0

def gettitle(url):
global current
try:
content = urllib.urlopen(url).read()
except:
current -= 1
return
if titlere.search(content):
title = titlere.search(content).group(1)
try:
title = title.decode('gbk').encode('utf-8')
except:
title = title
else:
title = "無標題"
print "%s: %s" % (url,title)
current -= 1
return

def geturls(url):
global current,max
ts = []
content = urllib.urlopen(url)
#使用set去重
result = set()
for eachline in content:
if urlre.findall(eachline):
temp = urlre.findall(eachline)
for x in temp:
#如果為站內鏈接,前面加上url
if not x.startswith("http:"):
x = urlparse.urljoin(url,x)
#不記錄js和css文件
if not x.endswith(".js") and not x.endswith(".css"):
result.add(x)
threads = []
for url in result:
t = threading.Thread(target=gettitle,args=(url,))
threads.append(t)
i = 0
while i < len(threads):
if current < max:
threads[i].start()
i += 1
current += 1
else:
pass

geturls("http://www..com")

使用正則表達式(re)只能做到一些比較簡單或者機械的功能,如果需要更強大的網頁分析功能,請嘗試一下beautiful soup或者pyquery,希望能幫到你

② Python正則表達式之re.match()

我們在面對生物數據,比如序列信息(比如鹼基序列、氨基酸序列等)的時候, 會時常要問,這其中是否包含著且含有多少某種已知的模式,一段DNA中是否包含轉錄起始特徵TATA box、一段RNA中是否包含某種lncRNA、一段肽鏈中是否包含鋅指結構等等;另一方面,我們在操作數據時,會時常遇到諸如把某個字元(對象)換成另一種字元(對象)的替換操作,而其本質還是如何搜索符合某種(替換)模式的對象。

在這些幾乎天天都可以碰到的 模式匹配/搜索問題中,正則表達式就是一把解決問題的利劍!
在Python的re模塊中,常用的有四個方法(match、search、findall、finditer)都可以用於匹配字元串,今天我們先來了解一下re.match()。

re.match()必須從字元串開頭匹配! match方法嘗試從字元串的起始位置匹配一個模式,如果不是起始位置匹配成功的話,match()就返回none。主要參數如下:

舉個栗子來理解一下它的用法:

運行結果:

從例子中我們可以看出,re.match()方法返回一個匹配的對象,而不是匹配的內容。通過調用span()可以獲得匹配結果的位置。而如果從起始位置開始沒有匹配成功,即便其他部分包含需要匹配的內容,re.match()也會返回None。

一般一個小括弧括起來就是一個捕獲組。我們可以使用group()來提取每組匹配到的字元串。
group()會返回一個包含所有小組字元串的元組,從 0 到 所含的小組號。

直接調用groups()則直接返回一個包含所有小組字元串的元組,從 1 到 所含的小組號。
再舉一個栗子:

運行結果:

③ python re 正則表達式 怎麼用

1、re.search()
匹配 TS開頭跟一個空格後跟若干個數字。
2、re.split()
拆分字元串是很常見的需求,通常使用split方法,但是一次指定多個分割符,split方法不支持,只能用re

④ Python re匹配

按照你的要求編寫匹配英文字典的Python3程序如下

importre

s='400buy買DIRECTION&PREPOSITION方向介詞490something某物 446beside在……旁邊401arrive到達 491every每個 402come來447above在……上面 ANIMALS動物 403hurt傷;刺痛448below在……下面 492chicken雞'

regex=r'([0-9]+s+[A-Za-z_-]+s+(在……[u4e00-u9fa5]+|S+))'

result=re.findall(regex,s)

foriinresult:

print(i[0])

源代碼(注意源代碼的縮進)

⑤ 強烈推薦!Python 這個寶藏庫 re 正則匹配


Python 的 re 模塊(Regular Expression 正則表達式)提供各種正則表達式的匹配操作。

在文本解析、復雜字元串分析和信息提取時是一個非常有用的工具 ,下面總結了 re 模塊的常用方法。


d 匹配所有的十進制數字 0-9

D 匹配所有的非數字,包含下劃線

s 匹配所有空白字元(空格、TAB等)

S 匹配所有非空白字元,包含下劃線

w 匹配所有字母、漢字、數字 a-z A-Z 0-9

W 匹配所有非字母、漢字、數字,包含下劃線


備註:符號.* 貪婪,符號.*? 非貪婪

[abc]:能匹配其中的單個字元

[a-z0-9]:能匹配指定范圍的字元,可取反(在最前面加入^)

[2-9] [1-3]:能夠做組合匹配

4.{ }:用於標記前面的字元出現的頻率,有如下情況:

{n,m}:代表前面字元最少出現n次,最多出現m次

{n,}:代表前面字元最少出現n次,最多不受限制

{,m}:代表前面字元最多出現n次,最少不受限制

{n}:前面的字元必須出現n次


字元串中有反斜杠的,需要對反斜杠做轉義


():分組字元,可以為匹配到的內容分組,快速獲取到分組中的數據 在正則裡面 "()" 代表的是分組的意思,一個括弧代表一個分組,你只能匹配到 "()" 中的內容。

group:用於查看指定分組匹配到的內容

groups:返回一個元組,組內為所有匹配到的內容

groupdict:返回一個字典,包含分組的鍵值對,需要為分組命名


作用:可以將字元串匹配正則表達式的部分割開並返回一個列表


flags定義包括:

re.I:忽略大小寫

re.L:表示特殊字元集 w, W, b, B, s, S 依賴於當前環境

re.M:多行模式

re.S:』.』並且包括換行符在內的任意字元(注意:』.』不包括換行符)

re.U:表示特殊字元集 w, W, b, B, d, D, s, S 依賴於 Unicode 字元屬性資料庫

在 Python 中使用正則表達式之前,先使用以下命令導入 re 模塊


例如:

『(d)(a)1』 表示:匹配第一是數字,第二是字元a,第三 1 必須匹配第一個一樣的數字重復一次,也就是被引用一次。

如 「9a9」 被匹配,但 「9a8」 不會被匹配,因為第三位的 1 必須是 9 才可以。

『(d)(a)2』 表示:匹配第一個是一個數字,第二個是a,第三個 2 必須是第二組()中匹配一樣的。

如 「8aa」 被匹配,但 「8ab」,「7a7」 不會被匹配,第三位必須是第二組字元的復製版,也是就引用第二組正則的匹配內容。





⑥ python正則表達式re.findall(r"\b\w+\b", s)中的r是什麼意思

Python中字元串前面加上
r
表示原生字元串,
與大多數編程語言相同,正則表達式里使用"\"作為轉義字元,這就可能造成反斜杠困擾。假如你需要匹配文本中的字元"\",那麼使用編程語言表示的正則表達式里將需要4個反斜杠"\\\\":前兩個和後兩個分別用於在編程語言里轉義成反斜杠,轉換成兩個反斜杠後再在正則表達式里轉義成一個反斜杠。Python里的原生字元串很好地解決了這個問題,這個例子中的正則表達式可以使用r"\\"表示。同樣,匹配一個數字的"\\d"可以寫成r"\d"。有了原生字元串,你再也不用擔心是不是漏寫了反斜杠,寫出來的表達式也更直觀。

⑦ Python re正則表達式模塊及其用法

1.第一個參數是正則表達式,這里為"(\w+)\s",如果匹配成功,則返回一個Match,否則返回一個None;
2.第二個參數表示要匹配的字元串;
3.第三個參數是標致位,用於控制正則表達式的匹配方式,如:是否區分大小寫,多行匹配等等。 re.search函數會在字元串內查找模式匹配,只到找到第一個匹配然後返回,如果...
4.第四個參數指替換個數。默認為0,表示每個匹配項都替換。 re.sub還允許使用函數對匹配...

⑧ Python 標准庫模塊 - re

正則表達式引擎對正則表達式文本進行編譯生成正則表達式對象,再由正則表達式對象對目標文本進行匹配,後返回匹配結果。

正則表達式中一共包含 2 中字元: 普通字元 、 元字元

匹配單個字元的元字元及其含義:

匹配重復性的元字元及其含義:

匹配位置的元字元及其含義:

分組匹配的元字元及其含義:

表示或運算的元字元:

轉義元字元:

在 Python 中使用正則表達式,我們需要藉助 re 模塊提供的強大 API,下面我們就來學習幾個 re 模塊常用的介面吧~

參數說明: findall("正則表達式", "要匹配的字元串", flags=標志1|標志2|...)
返回值:以列表形式返回匹配到的字元串。

下面,我們用 findall 返回 Python 之禪中首尾用到的反義詞:

運行結果:

當正則表達式中含有一個以上分組時, findall 返回的列表由元組構成,元組中包含每個分組匹配到的內容。如果只有一個分組,則返回由該分組匹配到的內容組所構成的列表:

match 函數返回的結果是一個 SRE_Match 對象:

SRE_Match 具有很多的屬性,比如 .string 屬性可以方便我們我獲取在匹配時輸入的字元串:

屬性 .re 可以獲取匹配時使用的編譯後的正則表達式模式:

由於默認使用了 re.UNICODE ,所以我們這里的 w 可以匹配中文字元。

屬性 .regs 則以列表的形式返回正則表達式匹配到的內容以及各個分組陪陪到的內容,不過請注意,返回的都是索引的形式:

可以使用序列切片來看一下我們的正則表達式及其中的兩個分組所匹配到的內容:

SRE_Match 對象也提供了非常多好用的方法,比如 groups 可以獲取各個分組匹配到的內容:

group 則可以靈活地獲取正則表達式或對應分組匹配到的內容:

如果使用的正則表達式定義了分組的名稱, group 還可以通過名稱獲取相應分組匹配的內容:

在定義了分組的名稱之後,還可以方便地使用 groupdict 以字典的形式返回所有分組匹配的結果:

最後需要注意的是, match 從字元串的開頭開始匹配,如果開頭不符合要求,則直接返回 None 。

與 match 匹配開頭不同, search 匹配第一個符合規則的字元串,未成功則返回 None 。參數: re.search(pattern, string, flags=0) ;返回值同 match 。

在介紹 match 的使用時,最後一個例子,由於我們在字元串前面添加了 'PYTHON' 導致 match 使用原來的正則表達式無法匹配,返回 None 。此時,使用 search 就可以迎刃而解啦:

運行結果:

小結:

參數: re.split(pattern, string, maxsplit=0, flags=0) , split 功能非常強大,以正則表達式匹配到的標志來分隔字元串,比如下面這樣一個混亂的字元串,我們要提取其中所有的數字:

下面,我們就來詳細介紹一下 split 的用法。

首先,是以單字元切割:

以分號切割時,共產生了 4 個子字元串,放在列表中返回。
下面,還是以單字元切割,但可以使用正則表達式中的 [] 來指定多種字元:

由於字元串 line 中有連續的 2 個分號,逗號或者空格,因此可以使用 [;s,]+ 來切割:

最後,上面的字元串在切割時,分隔符都沒有被保留下來,使用括弧捕獲分組,即可保留分隔符:

re.sub 提供比字元串的 replace 方法更加強大的功能:對於輸入的字元串 string ,利用正則表達式 pattern 強大的字元串處理功能,實現復雜的字元串替換處理為 repl ,返回被替換後的字元串。

下面的例子中,我們將句子中多餘的空格和數字去掉:

如果想要知道替換過程中,共發生了多少次替換,可以使用 subn :

小結:

上述的案例中,我們每次都需要傳入正則表達式,相應的函數每次在調用時,都需要編譯一次正則表達式。如果上述過程需要多次重復,那麼每次都去耗費時間編譯正則表達式是很不劃算的。

re 模塊為我們提供了 compile 函數,用來編譯正則表達式模式,返回編譯好模式。因此,可以把那些常用的正則表達式編譯成正則表達式對象,以提高效率。

格式: re.compile(pattern, flags=0) ,其中 pattern 為編譯時用的表達式字元串, flags 為編譯標志位,用於修改正則表達式的匹配方式,如:是否區分大小寫,多行匹配等。常用的 flags 有:

註:使用按位或 | 連接多個 flags 。

我們上述介紹的 re 模塊的匹配、分割、替換函數, compile 函數的返回值類提供了相應的方法,使用方式類似,只是不需要傳入正則表達式字元串而已。

由於用法幾乎一致,這里就不一一舉例啦~

貪婪模式 : * + ? {m,n} ,正則表達式的重復默認總是盡可能多得向後匹配內容。

非貪婪模式 : *? +? ?? {m,n}? ,盡可能少的匹配內容。

⑨ python中re庫的常見用法

. 匹配除換行符外的任意字元
\d 匹配數字
\D 匹配非數字
\w 匹配數字字母下劃線,支持中文
\W 小寫w的反集

[abc] 匹配abc中任意一個
[a-f] 匹配字母a到f中的任意一個
x|y 匹配x或者y
^ 匹配字元串的開頭
$ 匹配字元串的結尾

{3,5} 匹配次數,最少3個,最多5個
{3,} 至少匹配3次
* 匹配前一個字元,0次或多次
+ 匹配前一個字元,1次或多次

? 當前面不是數量表達式時,代表匹配0次或1次

舉個栗子:
findall()函數的作用是匹配所有符合條件字元串,並以列表形式返回

由於.是匹配除換行符外的所有字元,{3,5} 匹配次數,最少3個,最多5個,在默認的貪婪模式下會匹配最多的字元,所以在列表中,字母a開頭的字元串後面都跟了5個字元。

可以看到在非貪婪模式下,列表中的每一項都匹配最少的字元數。

從前往後,匹配到符合條件的最短的每一個字元串

邊界字元:
^ 限定開頭
$ 限定結尾

匹配分組:
() 提取出來的只有括弧里匹配到的部分

上文中已經用到這個方法了,返回匹配到的字元串列表,如果沒有匹配到的內容,則返回空列表。

flags參數是可以省略的,不省略時代表具有其他特殊的功能,如忽略大小寫,忽略換行符等,re.S代表匹配時忽略換行符

re.search()和re.findall()的參數是一樣的,只是返回結果不同,如果匹配到了,就返回該結果的正則表達式對象;如果沒有匹配到,則返回None

使用re.search()返回匹配到的第一個字元串的正則表達式對象,找到了就會停止匹配。因此這個函數比較適合在一個大文本中找第一個出現的字元串。

若想讓這個字元串展示出來,還需要藉助group()函數。

舉個栗子:

這個函數的作用是將正則表達式編譯為一個正則表達式對象,如果要多次使用這個正則表達式的話,可以先編譯,然後復用,使程序更高效一些,對這個對象繼續使用.match(string)就可以顯示匹配到的正則表達式對象,後續如果想要獲取具體內容的話,和上面是一眼國的,直接使用group(0)就可以啦。

如果不考慮復用的話,和re.mach(pattern, string)的效果是一樣的。

從運行結果也可以看出,re.match()和re.search()的區別,雖然二者都會返回匹配到的正則表達式對象,但是re.match()是從字元串的最開始位置開始匹配的,如果最開始的字元不匹配則會直接返回None;而re.search()則會一直往後找,直到找到第一個符合條件的字元串。

re.sub()函數用於替換字元串中的匹配項

舉個栗子:

將所有數字替換為了一個空格。

⑩ Python之re模塊

re模塊是python獨有的匹配字元串的模塊,該模塊中提供的很多功能是基於正則表達式實現的,
而正則表達式是對字元串進行模糊匹配,提取自己需要的字元串部分,他對所有的語言都通用。

1、字元

2、字元集

3、量詞
貪婪模式:總是嘗試匹配盡可能多的字元
非貪婪則相反,總是嘗試匹配盡可能少的字元。

{0,} 匹配前一個字元 0 或多次,等同於 * 元字元
{+,} 匹配前一個字元 1 次或無限次,等同於 + 元字元
{0,1 }匹配前一個字元 0 次或 1 次,等同於 ? 元字元
如果 () 後面跟的是特殊元字元如 (adc)* 那麼*控制的前導字元就是 () 里的整體內容,不再是前導一個字元

4、特殊分組用法表:只對正則函數返回對象的有用

5、斷言
從斷言的表達形式可以看出,它用的就是分組符號,只不過開頭都加了一個問號,這個問號就是在說這是一個非捕獲組,這個組沒有編號,不能用來後向引用,只能當做斷言。

匹配 <title>xxx</title> 中 xxx : (?<=<title>).*(?=</title>)
自己理解就是:

5、例子
(1)非
^(?!.*200).*$ ,只匹配200
^(?!.*[200|400]).*$ ,只匹配200和400
[^a-z] 反取,不含a-z字母的
(2) u4e00-u9fa5 中文
(3) r"([u4e00-u9fa5]s?[u4e00-u9fa5]+)" # 小 明 匹配這種單字中間有空格的

compile 函數用於編譯正則表達式,生成一個正則表達式( Pattern )對象,供 match() 和 search() 這兩個函數使用

match 嘗試從字元串的 起始位置 匹配一個模式,如果不是起始位置匹配成功的話,返回none。

search 掃描 整個字元串 並返回 第一個成功 的匹配。

re.match與re.search的區別:

正則表達式替換函數

替換匹配成功的指定位置字元串,並且返回替換次數,可以用兩個變數分別接受

(2) 兩個字元以上切割,放在 [ ] 中(不保留分隔符):

(3) 使用 ( ) 捕獲分組(保留分割符):

在字元串中找到正則表達式所匹配的所有子串,並返回一個列表,如果沒有找到匹配的,則返回空列表。
注意: match 和 search 是匹配一次 ,findall 匹配所有。

用法:

注意1:一旦匹配成,再次匹配,是從前一次匹配成功的,後面一位開始的,也可以理解為匹配成功的字元串,不在參與下次匹配

注意2:如果沒寫匹配規則,也就是空規則,返回的是一個比原始字元串多一位的,空字元串列表

注意3:正則匹配到空字元的情況,如果規則里只有一個組,而組後面是 * 就表示組里的內容可以是 0 個或者多過,這樣組里就有了兩個意思:
一個意思是匹配組里的內容,
二個意思是匹配組里 0 內容(即是空白)
所以盡量避免用 * 否則會有可能匹配出空字元串

正則表達式,返回類型為表達式對象的
如:<_sre.SRE_Match object; span=(6, 7), match='a'>
返回對象的,需要用正則方法取字元串,

閱讀全文

與pythonre例子相關的資料

熱點內容
銀河v10驅動重編譯 瀏覽:889
電腦上文件夾右擊就會崩潰 瀏覽:689
右美維持演算法 瀏覽:938
php基礎編程教程pdf 瀏覽:219
穿越之命令與征服將軍 瀏覽:351
android廣播重復 瀏覽:832
像阿里雲一樣的伺服器 瀏覽:318
水冷空調有壓縮機嗎 瀏覽:478
訪問日本伺服器可以做什麼 瀏覽:433
bytejava詳解 瀏覽:449
androidjava7 瀏覽:385
伺服器在山洞裡為什麼還有油 瀏覽:887
天天基金app在哪裡下載 瀏覽:975
伺服器軟路由怎麼做 瀏覽:293
冰箱壓縮機出口 瀏覽:229
OPT最佳頁面置換演算法 瀏覽:645
網盤忘記解壓碼怎麼辦 瀏覽:853
文件加密看不到裡面的內容 瀏覽:654
程序員腦子里都想什麼 瀏覽:434
oppp手機信任app在哪裡設置 瀏覽:189