Python re模塊下的常用方法


import re

# findall
# search
# match

# ret = re.findall('a','eva egon yuan')
# # 返回所有滿足條件的結果,放在列表里
# print(ret)

# ret = re.search('a','eva egon yuan')
# if ret:
#     print(ret.group())
# # 從前往后,找到一個就返回,返回的變量需要調用group才能拿到結果
# # 如果沒有找到,那么返回None,調用group會報錯

# ret = re.match('[a-z]+','eva egon yuan')
# if ret:
#     print(ret.group())
# # match是從頭開始匹配,如果正則從頭開始可以匹配上,就返回一個變量
# # 匹配的內容需要用group才能顯示
# # 如果沒匹配上,就返回None,調用group會報錯

# ret = re.split('[ab]','abcd')
# print(ret)      # ['', 'cd']
# # 先按'a'進行分割得到''和'bcd'.分別按'b'分割

# ret = re.sub('\d','H','eva3egon4yuan4',1)
# print(ret)
# # 將數字替換成'H’,參數1表示只替換1個

# ret = re.subn('\d','H','eva3egon4yuan4')
# print(ret)
# # 將數字替換成‘H',返回元組(替換的結果,替換了多少次)

# compile 編譯正則表達式成為對象
# obj = re.compile('\d{3}')
# # 將正則表達式編譯成為一個正則表達式對象,規則要匹配的是3個數字
# ret = obj.search('abc123eee') # 正則表達式對象調用search,參數為待匹配的字符串
# print(ret.group()) #結果:123

# finditer 迭代
# ret = re.finditer('\d','ds3su4784a') # finditer 返回一個匹配結果的迭代器
# # print(ret) # <callable_iterator object at 0x000001BC77390E48>
# # print(next(ret).group()) # 查看第一個結果
# # print(next(ret).group()) # 查看第二個結果
# # print([i.group() for i in ret]) # 查看剩余的結果
# for i in ret:
#     print(i.group())

# 分組
# ret = re.search('^[1-9](\d{14})(\d{2}[0-9x])','411403198606166078')
# print(ret.group())
# print(ret.group(1))
# print(ret.group(2)) # 正則表達式里有幾個分組就可以有幾個變量

 

注意:

1 findall的優先級查詢:

# ret = re.findall('www.(baidu|oldboy).com', 'www.oldboy.com')
# print(ret)  # ['oldboy']
# 這是因為findall會優先把匹配結果組里內容返回,如果想要匹配結果,取消權限即可

# ret = re.findall('www.(?:baidu|oldboy).com', 'www.oldboy.com')
# print(ret)  # ['www.oldboy.com']

2 split的優先級查詢

ret=re.split("\d+","eva3egon4yuan")
print(ret) #結果 : ['eva', 'egon', 'yuan']

ret=re.split("(\d+)","eva3egon4yuan")
print(ret) #結果 : ['eva', '3', 'egon', '4', 'yuan']

#在匹配部分加上()之后所切出的結果是不同的,
#沒有()的沒有保留所匹配的項,但是有()的卻能夠保留了匹配的項,
#這個在某些需要保留匹配部分的使用過程是非常重要的。

綜合練習與擴展

flags有很多可選值:

re.I(IGNORECASE)忽略大小寫,括號內是完整的寫法
re.M(MULTILINE)多行模式,改變^和$的行為
re.S(DOTALL)點可以匹配任意字符,包括換行符
re.L(LOCALE)做本地化識別的匹配,表示特殊字符集 \w, \W, \b, \B, \s, \S 依賴於當前環境,不推薦使用
re.U(UNICODE) 使用\w \W \s \S \d \D使用取決於unicode定義的字符屬性。在python3中默認使用該flag
re.X(VERBOSE)冗長模式,該模式下pattern字符串可以是多行的,忽略空白字符,並可以添加注釋
 

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM