1. 程式人生 > >Python 之 re模組 正則表示式

Python 之 re模組 正則表示式

正則表示式模式

模式字串使用特殊的語法來表示一個正則表示式:

字母和數字表示他們自身。一個正則表示式模式中的字母和數字匹配同樣的字串。

多數字母和數字前加一個反斜槓時會擁有不同的含義。

標點符號只有被轉義時才匹配自身,否則它們表示特殊的含義。

反斜槓本身需要使用反斜槓轉義。

由於正則表示式通常都包含反斜槓,所以你最好使用原始字串來表示它們。模式元素(如 r'/t',等價於'//t')匹配相應的特殊字元。

下表列出了正則表示式模式語法中的特殊元素。如果你使用模式的同時提供了可選的標誌引數,某些模式元素的含義會改變。

模式 描述
^ 匹配字串的開頭
$ 匹配字串的末尾。
. 匹配任意字元,除了換行符,當re.DOTALL標記被指定時,則可以匹配包括換行符的任意字元。
[...] 用來表示一組字元,單獨列出:[amk] 匹配 'a','m'或'k'
[^...] 不在[]中的字元:[^abc] 匹配除了a,b,c之外的字元。
re* 匹配0個或多個的表示式。
re+ 匹配1個或多個的表示式。
re? 匹配0個或1個由前面的正則表示式定義的片段,非貪婪方式
re{ n}
re{ n,} 精確匹配n個前面表示式。
re{ n, m} 匹配 n 到 m 次由前面的正則表示式定義的片段,貪婪方式
a| b 匹配a或b
(re) G匹配括號內的表示式,也表示一個組
(?imx) 正則表示式包含三種可選標誌:i, m, 或 x 。隻影響括號中的區域。
(?-imx) 正則表示式關閉 i, m, 或 x 可選標誌。隻影響括號中的區域。
(?: re) 類似 (...), 但是不表示一個組
(?imx: re) 在括號中使用i, m, 或 x 可選標誌
(?-imx: re) 在括號中不使用i, m, 或 x 可選標誌
(?#...) 註釋.
(?= re) 前向肯定界定符。如果所含正則表示式,以 ... 表示,在當前位置成功匹配時成功,否則失敗。但一旦所含表示式已經嘗試,匹配引擎根本沒有提高;模式的剩餘部分還要嘗試界定符的右邊。
(?! re) 前向否定界定符。與肯定界定符相反;當所含表示式不能在字串當前位置匹配時成功
(?> re) 匹配的獨立模式,省去回溯。
\w 匹配字母數字及下劃線
\W 匹配非字母數字及下劃線
\s 匹配任意空白字元,等價於 [\t\n\r\f].
\S 匹配任意非空字元
\d 匹配任意數字,等價於 [0-9].
\D 匹配任意非數字
\A 匹配字串開始
\Z 匹配字串結束,如果是存在換行,只匹配到換行前的結束字串。c
\z 匹配字串結束
\G 匹配最後匹配完成的位置。
\b 匹配一個單詞邊界,也就是指單詞和空格間的位置。例如, 'er\b' 可以匹配"never" 中的 'er',但不能匹配 "verb" 中的 'er'。
\B 匹配非單詞邊界。'er\B' 能匹配 "verb" 中的 'er',但不能匹配 "never" 中的 'er'。
\n, \t, 等. 匹配一個換行符。匹配一個製表符。等
\1...\9 匹配第n個分組的子表示式。
\10 匹配第n個分組的子表示式,如果它經匹配。否則指的是八進位制字元碼的表示式。

正則表示式例項

字元匹配

例項 描述
python 匹配 "python".

字元類

例項 描述
[Pp]ython 匹配 "Python" 或 "python"
rub[ye] 匹配 "ruby" 或 "rube"
[aeiou] 匹配中括號內的任意一個字母
[0-9] 匹配任何數字。類似於 [0123456789]
[a-z] 匹配任何小寫字母
[A-Z] 匹配任何大寫字母
[a-zA-Z0-9] 匹配任何字母及數字
[^aeiou] 除了aeiou字母以外的所有字元
[^0-9] 匹配除了數字外的字元

特殊字元類

例項 描述
. 匹配除 "\n" 之外的任何單個字元。要匹配包括 '\n' 在內的任何字元,請使用象 '[.\n]' 的模式。
\d 匹配一個數字字元。等價於 [0-9]。
\D 匹配一個非數字字元。等價於 [^0-9]。
\s 匹配任何空白字元,包括空格、製表符、換頁符等等。等價於 [ \f\n\r\t\v]。
\S 匹配任何非空白字元。等價於 [^ \f\n\r\t\v]。
\w 匹配包括下劃線的任何單詞字元。等價於'[A-Za-z0-9_]'。
\W 匹配任何非單詞字元。等價於 '[^A-Za-z0-9_]'。

正則表示式修飾符 - 可選標誌

正則表示式可以包含一些可選標誌修飾符來控制匹配的模式。修飾符被指定為一個可選的標誌。多個標誌可以通過按位 OR(|) 它們來指定。如 re.I | re.M 被設定成 I 和 M 標誌:

修飾符 描述
re.I 使匹配對大小寫不敏感
re.L 做本地化識別(locale-aware)匹配
re.M 多行匹配,影響 ^ 和 $
re.S 使 . 匹配包括換行在內的所有字元
re.U 根據Unicode字符集解析字元。這個標誌影響 \w, \W, \b, \B.
re.X 該標誌通過給予你更靈活的格式以便你將正則表示式寫得更易於理解。

Python中常用的正則表示式處理函式。

正則物件(re object)

    • search():  最常用的,返回一個匹配物件(Match Object)
    • match():類似search,但僅僅從文字的開始進行匹配;
    • split():分割一個string,返回字串的陣列
    • findall():找到所有的匹配字串的清單(list)
    • finditer():類似findall,返回匹配物件(Match Object)的iteration
    • sub(): 字串替換
    • subn(): 類似sub, 但是同時返回替換的數量

re.match函式

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

函式語法

re.match(pattern,string, flags=0)

函式引數說明:

引數 描述
pattern 匹配的正則表示式
string 要匹配的字串。
flags 標誌位,用於控制正則表示式的匹配方式,如:是否區分大小寫,多行匹配等等。

匹配成功re.match方法返回一個匹配的物件,否則返回None。

我們可以使用group(num) 或 groups() 匹配物件函式來獲取匹配表示式。

匹配物件方法 描述
group(num=0) 匹配的整個表示式的字串,group() 可以一次輸入多個組號,在這種情況下它將返回一個包含那些組所對應值的元組。
groups() 返回一個包含所有小組字串的元組,從 1 到 所含的小組號。

例項 1:

#!/usr/bin/python# -*- coding: UTF-8 -*- import re
print(re.match('www','www.runoob.com').span())# 在起始位置匹配print(re.match('com','www.runoob.com'))# 不在起始位置匹配

以上例項執行輸出結果為:

(0,3)None

例項 2:

#!/usr/bin/pythonimport re
line ="Cats are smarter than dogs"
matchObj = re.match( r'(.*) are (.*?) .*', line, re.M|re.I)if matchObj:print"matchObj.group() : ", matchObj.group()print"matchObj.group(1) : ", matchObj.group(1)print"matchObj.group(2) : ", matchObj.group(2)else:print"No match!!"

以上例項執行結果如下:

matchObj.group():Cats are smarter than dogs
matchObj.group(1):Cats
matchObj.group(2):  smarter

re.search方法

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

函式語法:

re.search(pattern,string, flags=0)

函式引數說明:

引數 描述
pattern 匹配的正則表示式
string 要匹配的字串。
flags 標誌位,用於控制正則表示式的匹配方式,如:是否區分大小寫,多行匹配等等。

匹配成功re.search方法返回一個匹配的物件,否則返回None。

我們可以使用group(num) 或 groups() 匹配物件函式來獲取匹配表示式。

匹配物件方法 描述
group(num=0) 匹配的整個表示式的字串,group() 可以一次輸入多個組號,在這種情況下它將返回一個包含那些組所對應值的元組。
groups() 返回一個包含所有小組字串的元組,從 1 到 所含的小組號。

例項 1:

#!/usr/bin/python# -*- coding: UTF-8 -*- import re
print(re.search('www','www.runoob.com').span())# 在起始位置匹配print(re.search('com','www.runoob.com').span())# 不在起始位置匹配

以上例項執行輸出結果為:

(0,3)(11,14)

例項 2:

#!/usr/bin/pythonimport re
line ="Cats are smarter than dogs";
searchObj = re.search( r'(.*) are (.*?) .*', line, re.M|re.I)if searchObj:print"searchObj.group() : ", searchObj
            
           

相關推薦

Python re模組 表示式

正則表示式模式 模式字串使用特殊的語法來表示一個正則表示式: 字母和數字表示他們自身。一個正則表示式模式中的字母和數字匹配同樣的字串。 多數字母和數字前加一個反斜槓時會擁有不同的含義。 標點符號只有被轉義時才匹配自身,否則它們表示特殊的含義。

python路---24 表示式 re模組

一.正則表示式   1.字元組     ① [abc] 匹配a或b或c     ②  [a-z] 匹配a到z之間的所有字⺟      [0-9]匹配所有阿拉伯數字   2.元字元   3.量詞   4.重要搭配   ①  .*?&n

python--re模組, 表示式

正則表示式是對字串操作的一種邏輯公式.我們一般使用正則表示式對字串進行匹配和過濾.使用這則的優缺點: 有點:靈活,功能性強,邏輯性強 缺點: 上手男.一旦上手,會愛上這個東西 工具: 各大文字編輯器一般都由正則匹配功能. 我們可以去http://tool.chinaz.com/regex/ 線

python re模組表示式

1 re的工作是在python中執行正則表示式 2 import re 3 4 # find 5 result = re.findall('\d+', 'baby的電話號是:185123456789') 6 print(result) 7 # 8 it = re.finditer('\

day 23 re模組 表示式

一 . 正則表示式       元字元:除了換行符外的任意字元        .   :    匹配除了換行符意外的任意字元       /w : 匹配數字,字母,

pythonre模組表示式)常用函式

1、compile() 編譯正則表示式模式,返回一個物件的模式。(可以把那些常用的正則表示式編譯成正則表示式物件,這樣可以提高一點效率。) 格式: re.compile(pattern,flags=0) pattern: 編譯時用的表示式字串。 flags 編譯標誌位,用於修改正

[Python模組]表示式 re模組的使用與例項

很喜歡Python教材中的這句格言: 有些人面臨問題時會想:“我知道, 我將使用正則表示式來解決這個問題.” 這讓他們面臨的問題變成了兩個. ---------Jamie Zawinski 正則表示式的確好用,但是複雜的模式難以閱讀和維護,與其把花在研究用正則表示式處理複雜的問題上,

Python 3.7.1 模組 表示式 re

正則表示式操作 1. 正則表示式語法 1.1 特殊字元 . ^ $ * + ? *?,+?,?? {m} {m,n} {m,n}

[Python模組]表示式 re模組的使用及例項

很喜歡Python教材中的這句格言: 有些人面臨問題時會想:“我知道, 我將使用正則表示式來解決這個問題.” 這讓他們面臨的問題變成了兩個. ---------Jamie Zawinski 正則表示式的確好用,但是複雜的模式難以閱讀和維護,與其把花在研究用正

Python自然語言處理—表示式檢測片語re.search()

1. 開頭和結尾 ^ $ import re import nltk wordlist = [w for w in nltk.corpus.words.words("en") if w.islower()] print([w for w in wordlist if re.search("^ed

python re.sub 表示式過濾指定字元

re.sub(pattern, repl, string, count=0, flags=0) Return the string obtained by replacing the leftmost non-overlapping occurrences o

Python爬蟲--- 1.4 表示式re

原文連結:https://www.fkomm.cn/article/2018/7/20/19.html 想要學習爬蟲,正則表示式是一定繞不過去的一關。正則表示式是我們在篩選文字資料是經常使用的利器。簡單來說,一個正則表示式表達了符合這一規則的一系列的文字。 從“萬用字元”到正則表示式 玩lin

python路---24 表達式 re模塊

findall group 表達 mat 替換 all arch bsp search 一.正則表達式   1.字符組    ① [abc] 匹配a或b或c    ② [a-z] 匹配a到z之間的所有字?      [0-9]匹配所有阿拉伯數字   2.元字符  

python re.search 和 re.match 表示式

原文:http://www.111cn.net/phper/157/37171_1.htm 一 re.search 和 re.match python提供了2中主要的正則表示式操作:re.match 和 re.search。 match :只從字串的開始與正則表示式匹配

從零開始的Python學習Episode 15——表示式

正則表示式   正則表示式(或 RE)是一種小型的、高度專業化的程式語言,(在Python中)它內嵌在Python中,並通過 re 模組實現,所以使用時要匯入re模組。正則表示式模式被編譯成一系列的位元組碼,然後由用 C 編寫的匹配引擎執行。   先說幾個元字元 &nbs

Python中常用的表示式

正則表示式是對字串操作的一種邏輯公式,就是用事先定義好的一些特定字元、及這些字元的組合,組成一個“規則字串”,這個“規則字串”用來表達對字串的一種過濾邏輯。(非python獨有,但是python的re模組提供了實現,在python中寫正則表示式幾乎都用這個庫) 樣例展示: 這裡要用到線上正則

python第一篇:表示式的方法簡單歸納

首先先對一些常用的匹配模式進行一下介紹及互相認識一下,當然了可能它認識我,但我絕對還不認識它。。。 ******************************************** 元字元 【 . ^ $ * + ? {} [] \ | () 】 *************

Re 庫——表示式

regular expression, regex, RE 正則表示式是用來簡潔表達一組字串的表示式 正則表示式的常用操作符 操作符 說明 例項 . 表示任何單個字元

python中常用的表示式符號

'.' 預設匹配除\n之外的任意一個字元,若指定flag DOTALL,則匹配任意字元,包括換行 '^' 匹配字元開頭,若指定flags MULTILINE,這種也可以匹配上(r"^a","\nabc\neee",flags=re.MULTILINE) '$' 匹配字元結尾,或e

Python 利用BeautifulSoup和表示式 來爬取旅遊網資料

import re import requests import time from bs4 import BeautifulSoup url = ‘http://www.cntour.cn/’ r = requests.get(url) print(r.encoding,len(r.t