字串與正規表示式

2022-09-16 23:03:20 字數 3353 閱讀 7679

一.字串

1.格式化浮點數字

'%f'%1.25  輸出:1.250000(預設輸出小數點後的6位數字)

'%.2f'%1.25 輸出:1.25  (精確到小數點後兩位)

2.字串與日期的轉換

例:import time,datetime

time.strftime("%y-%m-%d %x",time.localtime())

t=time.strptime('2018-08-08','%y-%m-%d')

y,m,d=t[0:3]

3.正規表示式

3-1:特殊字元

^:正規表示式的開始字元

$:正規表示式的結束字元

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

\w:匹配非字母,數字,下劃線的字元

\s:匹配空白字元

\s:匹配非空白字元

\d:匹配數字

\d:匹配非數字的字元

\b:匹配單詞的開始和結束

\b:匹配不是單詞的開始和結束的位置

. :匹配任意字元,包括漢字

[m]:匹配單個字串

[m1,m2]:匹配多個字串

[m-n]:匹配m到n區間內的數字,字母

[^m]:匹配除m以外的字串

():對正規表示式進行分組,一對圓括號表示一組

規則選項

i:忽略大小寫

l:字符集本地化,用於多語言環境

m:多行匹配

s:是"."匹配"\n"在內的所有字元

x:忽略正規表示式中的空白,換行,方便新增注釋

u: \w,\w,\b,\b,\d,\d,\s,\s都將使用unicode

3-2:常用限定符 

*:匹配0次或多次

+:匹配一次或多次

?:匹配一次或0次

:重複m次

:重複m到n次,其中n可以省略,表示m到任意次

限定符與?號的組合

*?:匹配0次或多次,且最短匹配

+?:匹配一次或多次,且最短匹配

??:匹配一次或0次,且最短匹配

:重複m次,且最短匹配

(?#...):正規表示式中的注釋

(?p...):給分組命名,name表示分組的名稱

(?p=name):使用名為name的分組

例:[\(-]? :表示做多只能取"("或"-"其中乙個

處理正規表示式的模組:re

re的常用函式:

findall(pattern,string,flags=0):根據pattern在string中匹配字串

sub():根據指定的正規表示式,替換原字串中的子串  (注:先建立s的拷貝,然後在拷貝中替換字串,並不會改變s的內容)

subn():作用和sub相同,返回乙個二元的元組

match(pattern,string,flags=0):根據pattern從string的頭部開始匹配字串,只返回第一次匹配成功的物件

search():根據pattern在string中匹配字串,只返回第一次匹配成功的物件

compile():編譯正規表示式pattern,返回1個pattern物件

split():根據pattern分隔string,maxsplit表示最大的分隔數

escape():匹配字串中的特殊字元,如*,+,?

例:import re

s='hello world'

re.findall(r'^hello',s)         #結果為:

re.findall(r'^hello',s,re.i)   #re.i表示忽略大小寫

re.findall(r'\b\w+\b',s)       #:結果為:['hello', 'world']

替換指定字串中的子串:

import re 

s='hello world'

re.sub('hello','hi',s)     #hi world

re.sub('hello','hi',s[-4:])    #因為沒有找到匹配的子串,所有輸出結果為s[-4:],即orld

tel3='(010)12345678'

print(re.findall(r'[\(]?\d[\)-]?\d|[\(]?\d[\)-]?\d',tel3))

正規表示式的解析非常費時,如果多次使用findall()的方式匹配字串,搜尋效率會很低,可以使用compile()進行預編譯,該函式返回乙個pattern物件

pattern物件的屬性和方法如下:

pattern:獲取當前使用的正規表示式

findall(string[,start[,end]]):查詢所有符合pattern物件匹配條件的結果,返回乙個包含匹配結果的列表。

finditer(string[,start[,end]]):返回乙個包含匹配結果的位址

match():用法同re.match()

search():用法同re.search()

例:import re

s='1abc23def45'

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

print(p.findall(s))

print(p.pattern)

函式compile()通常與match(),search(),group()一起使用,對含有分組的正規表示式進行解析。match()與search()將返回乙個match()物件,

match()物件的方法和屬性:

pos:搜尋的開始位置

endpos:搜尋的結束位置

string:搜尋的字串

re:當前使用的正規表示式的物件

lastindex:最後匹配的組索引

lastgroup:最後匹配的組名

group(index=0):某個分組的匹配結果,如果index等於0表示匹配整個正規表示式

groups():所有分組的匹配結果,每個分組的結果組成乙個列表返回

groupdict():返回組名作為 key,每個分組的匹配結果作為value的字典

start([group]):獲取組的開始位置

end([group]):獲取組的結束位置

span([group]):獲取組的開始和結束位置

expand(template):使用組的匹配結果來替換模板template中的內容,並把替換後的字串返回

例:import re

p=re.compile(r'(abc)\1')

m=p.match('abcabcabc')

print(m.group(0),m.group(1),m.group())

p=re.compile(r"(?pabc)(?p=one)")

m=p.search("abcabcabc")    

print(m.group("one"))

Python 字串與正規表示式

alist list range 1 1001 blist list map str alist cstr join blist dstr cstr str sum range 1 1001 print dstr open text.txt w write dstr import os print ...

正規表示式匹配字串

正規表示式用於字串處理 表單驗證等場合,實用高效。現將一些常用的表示式收集於此,以備不時之需。匹配中文字元的正規表示式 u4e00 u9fa5 評注 匹配中文還真是個頭疼的事,有了這個表示式就好辦了 匹配雙位元組字元 包括漢字在內 x00 xff 評注 可以用來計算字串的長度 乙個雙位元組字元長度計...

正規表示式匹配 字串

正規表示式匹配字串 假使,有幾個需要驗證的字串用 連線在一起 形如 farmer1,1farmer234 想用正規表示式來匹配每乙個字串。private static string sourcestr farmer1,1farmer234 private static string key farm...