python 字串匹配與正規表示式

2021-07-15 09:27:23 字數 3329 閱讀 8312

這個方法將從string的pos下標處起嘗試匹配pattern;如果pattern結束時仍可匹配,則返回乙個match物件;如果匹配過程中pattern無法匹配,或者匹配未結束就已到達endpos,則返回none。 

pos和endpos的預設值分別為0和len(string);re.match()無法指定這兩個引數,引數flags用於編譯pattern時指定匹配模式。

注意:這個方法並不是完全匹配。當pattern結束時若string還有剩餘字元,仍然視為成功。想要完全匹配,可以在表示式末尾加上邊界匹配符'$'。

2.search(string[, pos[, endpos]]) | re.search(pattern, string[, flags]):

這個方法用於查詢字串中可以匹配成功的子串。從string的pos下標處起嘗試匹配pattern,如果pattern結束時仍可匹配,則返回乙個match物件;若無法匹配,則將pos加1後重新嘗試匹配;直到pos=endpos時仍無法匹配則返回none。 

pos和endpos的預設值分別為0和len(string));re.search()無法指定這兩個引數,引數flags用於編譯pattern時指定匹配模式。

# encoding: utf-8 

import re

# 將正規表示式編譯成pattern物件

pattern = re.compile(r'world')

# 使用search()查詢匹配的子串,不存在能匹配的子串時將返回none

# 這個例子中使用match()無法成功匹配

match = pattern.search('hello world!')

if match:

# 使用match獲得分組資訊

print match.group()

### 輸出 ###

# world

3.split(string[, maxsplit]) | re.split(pattern, string[, maxsplit]):

按照能夠匹配的子串將string分割後返回列表。maxsplit用於指定最大分割次數,不指定將全部分割。
import re

p = re.compile(r'\d+')

print p.split('one1two2three3four4')

### output ###

# ['one', 'two', 'three', 'four', '']

4.findall(string[, pos[, endpos]]) | re.findall(pattern, string[, flags]):

搜尋string,以列表形式返回全部能匹配的子串。
import re

p = re.compile(r'\d+')

print p.findall('one1two2three3four4')

### output ###

# ['1', '2', '3', '4']

5.finditer(string[, pos[, endpos]]) | re.finditer(pattern, string[, flags]):

搜尋string,返回乙個順序訪問每乙個匹配結果(match物件)的迭代器。
import re

p = re.compile(r'\d+')

for m in p.finditer('one1two2three3four4'):

print m.group(),

### output ###

# 1 2 3 4

6.sub(repl, string[, count]) | re.sub(pattern, repl, string[, count]):

使用repl替換string中每乙個匹配的子串後返回替換後的字串。 

當repl是乙個字串時,可以使用\id或\g、\g引用分組,但不能使用編號0。

當repl是乙個方法時,這個方法應當只接受乙個引數(match物件),並返回乙個字串用於替換(返回的字串中不能再引用分組)。

count用於指定最多替換次數,不指定時全部替換。

import re

p = re.compile(r'(\w+) (\w+)')

s = 'i say, hello world!'

print p.sub(r'\2 \1', s)

deffunc

(m):

return m.group(1).title() + ' ' + m.group(2).title()

print p.sub(func, s)

### output ###

# say i, world hello!

# i say, hello world!

7.subn(repl, string[, count]) |re.sub(pattern, repl, string[, count]):

返回 (sub(repl, string[, count]), 替換次數)。

import re

p = re.compile(r'(\w+) (\w+)')

s = 'i say, hello world!'

print p.subn(r'\2 \1', s)

deffunc

(m):

return m.group(1).title() + ' ' + m.group(2).title()

print p.subn(func, s)

### output ###

# ('say i, world hello!', 2)

# ('i say, hello world!', 2)

python 字串匹配 正則 re

1.re.match 嘗試從字串的起始位置匹配乙個模式,如果不是起始位置匹配成功的話,match 就返回none。import re content 123i love 123 you pattern r 123 res re.match pattern,content print res prin...

mysql 字串正則匹配 mysql正規表示式

預備閱讀 mysql中用正規表示式進行搜尋1 使用mysql正規表示式 1 基本字串匹配 select prod name from products where prod name regexp 1000 order by prod name 檢索prod name包含文字1000的所有行。除關鍵...

字串正則匹配

匹配1個或多個 匹配乙個 abc a b false abc a?c true abc a true ab a false 重點就是處理掉 如果匹配的時候 後面沒有字元了那返回真,如果有的話,那麼很簡單,從str中從後往前拿pattern 中 從 開始到pattern末尾個字元個數的字元,繼續遞迴匹...