python處理正規表示式

2021-10-02 19:23:11 字數 3831 閱讀 9557

一.正規表示式

正規表示式是乙個用特殊符號表示的字串行,用來檢查乙個字串是否與某種字串模式匹配。

較常用的正規表示式有:

正規表示式

匹配物件

普通字元

匹配對應的字元

\n匹配換行符

\t匹配製表符

\d匹配十進位制數字

\d匹配除了十進位制數字的其他字元

\w匹配字母,數字,下劃線

\w匹配除了字母,數字,下劃線的其他字元

\s匹配空白字元(space)

\s匹配除了空白字元的其他字元

[***xx]

匹配內的任意乙個

[^***x]

匹配除了內***x的任意字元

.匹配除換行符外的任意乙個

^匹配字串起始位置

$匹配字串結尾位置

*前乙個字元出現0或1或…次

?前乙個字元出現0或1次

+前乙個字元出現1或多次

前一字元恰好出現n次

前乙個字元至少出現n次

前乙個字元出現n~m次

()模式匹配單元:()內為要提取的內容

記憶:1."\小寫"和"\大寫"互為否定(例:\d匹配十進位制數字,\d則匹配非十進位制數字)。

2.「在原子表內,^符號表示取否定意義」(例:[123]匹配123內任意乙個,[ ^123]匹配除了123的其他任意字元)

二.python處理正規表示式

python處理正規表示式主要通過re模組,處理時import該模組。

import re
主要介紹re模組中三個較常用的匹配函式(match,search,findall):

(1)re.match(pattern, string, flags)

函式的三個引數分別為正規表示式,模式串,可選引數(修改匹配某些規則)

常用的可選引數及其含義:

可選引數

含義re.i

使匹配忽略大小寫

re.s

使.也可以匹配換行符

模式起始位置匹配模式串,若從起始位置匹配不成功,match()就返回none[即:匹配成功的位置必須包括起始處]

print

(re.match(r"py"

,"python"))

#out:

print

(re.match(r"py"

,"python"

).span())

#span()返回匹配位置索引

#out:(0, 2)

print

(re.match(r"py"

,"python"

).group())

#返回匹配到的物件

#out:py

print

(re.match(r"th"

,"python"))

#不能從模式串的起始位置匹配

#out:none

print

(re.match(r"py"

,"python"

,re.i)

)#可選引數使匹配不區分大小寫

#out:

正規表示式前的r的含義指此字串為一普通字串,即轉義字元不使用其轉義含義

(2)re.search(pattern, string, flags)

函式的形參意義同上,此函式是掃整個模式串進行匹配,不用像match那樣必須包括模式串起始位置。

例子的正規表示式的含義:從y開始,然後後面可以包括零個或多個除了換行符之外的字元(詳細看上面**中各正規表示式的組合含義)。

(字串的匹配預設為貪心方式:即如果滿足條件則匹配越多越好)。

print

(re.search(

"y.*"

,"pypypy"))

#out:

print

(re.search(

"y.*"

,"pypypy"

).span())

#out:(1, 6)

print

(re.search(

"y.*"

,"pypypy"

).group())

#out:ypypy

print

(re.search(

"a.*"

,"pypypy"))

#out:none

re.match只匹配字串的開始,如果字串開始不符合正規表示式,則匹配失敗,函式返回none;而re.search匹配整個字串,直到找到乙個匹配。

(3)re.findall(string,start(起始位置索引,可選,預設為0),end(結束位置索引,不包括該位置,可選,預設為len))

在字串中找到正規表示式所匹配的所有子串

注意: match 和 search 是匹配一次 ,findall 匹配所有

同時,使用findall要先把正規表示式編譯出來,這裡要用到另乙個函式compile(pattern,flag)用來編譯字串(可寫入可選引數修改匹配規則)。

reg=r"py*"

#匹配p及連著0個或多個y

print

(re.

compile

(reg)

.findall(

"py-py-pyy"))

#out:['py', 'pyy']

print

(re.

compile

(reg,re.i)

.findall(

"py-py-pyy"))

#匹配不區分大小寫

#out:['py', 'py', 'pyy']

print

(re.

compile

(reg)

.findall(

"py-py-pyy",1

,7))

#指定起始及終止位置

#out:['p']

三.匹配方式

主要分為兩種方式:

1.貪心/貪婪模式(預設為這種模式)

此方式即為在滿足條件的情況下匹配的字元越多越好。

reg=r"py*"

#匹配p及連著0個或多個y,貪婪模式匹配滿足條件的最多個y

print

(re.

compile

(reg)

.findall(

"py-py-pyy"))

#out:['py', 'pyy']

2.精準/懶惰模式:

(1)*?

(2)+?

reg=r"py*?"

#此*?組合開啟精準模式,原來y可匹配0個或多個,現在匹配最少(即0個就結束)

print

(re.

compile

(reg)

.findall(

"py-py-pyy"))

#out:['p', 'p']

這兩種字元組合在一起後即表示精準模式,即匹配成功就停止。

正規表示式處理字元(Python)

匹配任意乙個字元,除了換行符 匹配0個或多個表示式 匹配1個或多個表示式 匹配任意長度字串 s匹配任意空白字元,等價於 t n r f s匹配任意非空字元 w匹配字母數字和下劃線 d匹配任意數字 精確匹配n個前面表示式 如 d 匹配字串開頭 匹配字串結尾 內建庫re re.match re.matc...

python正規表示式元字元 正規表示式

字元 描述將下乙個字元標記為乙個特殊字元 或乙個原義字元 或乙個 向後引用 或乙個八進位制轉義符。例如,n 匹配字元 n n 匹配乙個換行符。序列 匹配 而 則匹配 匹配輸入字串的開始位置。如果設定了 regexp 物件的 multiline 屬性,也匹配 n 或 r 之後的位置。匹配輸入字串的結束...

正規表示式相關 正規表示式處理html內容

前面關於顯示html文字用了瀏覽器控制項來處理 這個不過是為了解決燃眉之急不得已才使用。其實最好還是使用正規表示式處理,也就是自己寫乙個html文字直譯器,當然這個實現起來也是不容易的,首先你得將所有html文字標籤羅列出來,然後一一翻譯。下面先搞乙個簡單的例子吧。public static str...