Python正規表示式學習

2022-03-13 01:44:50 字數 3229 閱讀 7459

python 中的re 模組

正規表示式

就個人而言,主要用它來做一些複雜字串分析,提取想要的資訊

學習原則:夠用就行,需要的時候在深入

現總結如下:

正規表示式中特殊的符號:

「.」 表任意字元

「^ 」 表string起始

「$」 表string 結束

「*」 「+」 「?」 跟在字元後面表示,0個——多個, 1個——多個, 0個或者1個

*?, +?, ?? 符合條件的情況下,匹配的盡可能少//限制*,+,?匹配的貪婪性

匹配此前的字元,重複m次

m到n次,m,n可以省略

舉個例子 『a.*b』 表示a開始,b結束的任意字串

a 匹配連續5個a

表一系列字元 [abcd] 表a,b,c,d [^a] 表示非a

| a|b 表示a或者b , ab為任意的正規表示式 另外|是非貪婪的如果a匹配,則不找b

(…) 這個括號的作用要結合例項才能理解, 用於提取資訊

\d [0-9]

\d 非 \d

\s 表示空字元

\s 非空字元

\w [a-za-z0-9_]

\w 非 \w

一:re的幾個函式

1: compile(pattern, [flags])

根據正規表示式字串 pattern 和可選的flags 生成正規表示式 物件

生成正規表示式 物件(見二)

其中flags有下面的定義:

i 表示大小寫忽略

l 使一些特殊字符集,依賴於當前環境

m 多行模式 使 ^ $ 匹配除了string開始結束外,還匹配一行的開始和結束

s 「.「 匹配包括『\n』在內的任意字元,否則 . 不包括『\n』

u make \w, \w, \b, \b, \d, \d, \s and \s dependent on the unicode character properties database

x 這個主要是表示,為了寫正規表示式,更可毒,會忽略一些空格和#後面的注釋

其中s比較常用,

應用形式如下

import re

re.compile(……,re.s)

2: match(pattern,string,[,flags])

讓string匹配,pattern,後面分flag同compile的引數一樣

返回matchobject 物件(見三)

3: split( pattern, string[, maxsplit = 0])

用pattern 把string 分開

>>> re.split(『\w+』, 『words, words, words.』)

['words', 'words', 'words', '']

括號『()』在pattern內有特殊作用,請查手冊

4:findall( pattern, string[, flags])

比較常用,

從string內查詢不重疊的符合pattern的表示式,然後返回list列表

5:sub( pattern, repl, string[, count])

repl可以時候字串,也可以式函式

當repl是字串的時候,

就是把string 內符合pattern的子串,用repl替換了

當repl是函式的時候,對每乙個在string內的,不重疊的,匹配pattern

的子串,呼叫repl(substring),然後用返回值替換substring

>>> re.sub(r』def\s+([a-za-z_][a-za-z_0-9]*)\s*\(\s*\):』,

… r』static pyobject*\npy_\1(void)\n』, dashrepl, 『pro—-gram-files』)

『pro–gram files』

二:正規表示式物件 (regular expression objects )

產生方式:通過 re.compile(pattern,[flags])回

match( string[, pos[, endpos]]) ;返回string[pos,endpos]匹配

pattern的matchobject(見三)

split( string[, maxsplit = 0])

findall( string[, pos[, endpos]])

sub( repl, string[, count = 0])

這幾個函式和re模組內的相同,只不過是呼叫形式有點差別

re.幾個函式和 正規表示式物件的幾個函式,功能相同,但同一程式如果

多次用的這些函式功能,正規表示式物件的幾個函式效率高些

三:matchobject

通過 re.match(……) 和 re.compile(……).match返回

該物件有如下方法和屬性:

方法:group( [group1, ...])

groups( [default])

groupdict( [default])

start( [group])

end( [group])

說明這幾個函式的最好方法,就是舉個例子

matchobj = re.compile(r」(?p\d+)\.(\d*)」)

m = matchobj.match(』3.14sss』)

#m = re.match(r」(?p\d+)\.(\d*)」, 』3.14sss』)

print m.group()

print m.group(0)

print m.group(1)

print m.group(2)

print m.group(1,2)

print m.group(0,1,2)

print m.groups()

print m.groupdict()

print m.start(2)

print m.string

輸出如下:

3.14

3.14314

(』3′, 』14′)

(』3.14′, 』3′, 』14′)

(』3′, 』14′)

23.14sss

所以group() 和group(0)返回,匹配的整個表示式的字串

另外group(i) 就是正規表示式中用第i個「()」 括起來的匹配內容

(』3.14′, 』3′, 』14′)最能說明問題了。

更進一步的學習,請看手冊

Python 正規表示式學習(二)正規表示式語法

一,單一字元匹配 1 匹配任意字元 import re res re.match r a.abcd print res.group 列印結果 abc一點.表示匹配任意的字元。上面的 表示匹配a後面的任意兩個字元。必須從a開始。若寫成 b.則會發生錯誤。2 匹配指定字元 如 0 9a za z 表示 ...

python正規表示式學習

今天學習了python中有關正規表示式的知識。關於正規表示式的語法,不作過多解釋,網上有許多學習的資料。這裡主要介紹python中常用的正 則表示式處理函式。re.match 嘗試從字串的開始匹配乙個模式,如 下面的例子匹配第乙個單詞。import re text jgood is a handso...

python正規表示式學習

python 中的re 模組 正規表示式 就個人而言,主要用它來做一些複雜字串分析,提取想要的資訊 學習原則 夠用就行,需要的時候在深入 現總結如下 正規表示式中特殊的符號 表任意字元 表string起始 表string 結束 跟在字元後面表示,0個 多個,1個 多個,0個或者1個 符合條件的情況下...