Python 正規表示式

2021-08-20 12:46:53 字數 4017 閱讀 9007

自己總結的一些常用的正規表示式的方法

正規表示式教程

# -*- coding:utf-8 -*-

import re

pattern = r"(\w+) (\w+)"

match = re.match(pattern,"i love you")

if match: # 字串只要不是 none 就想當於true

print(match) # <_sre.sre_match object; span=(0, 6), match='i love'>

print(match.group(0)) # 0 : 表示最大的分組

print(match.group(1)) # 1 :表示第一分組

print(match.group(2))

print(match.group(0,1,2)) # 可以同時返回多個分組,封裝到 tuple 裡面

print(match.start(1),match.end(1)) # start - end : 返回組的起始位置

print(match.start(2),match.end(2))

print(match.span(1)) # span : 返回第一組的起始位址,將起始位址封裝到tuple 裡面

else:

print("none")

測試結果:

<_sre.sre_match object; span=(0, 6), match='i love'>

i love

ilove

('i love', 'i', 'love')

0 12 6

(0, 1)

(2, 6)

# -*- coding:utf-8 -*-

import re

pattern = r"(\w+) (\w+)"

s = "hello world"

match = re.search(pattern,s) # <_sre.sre_match object; span=(0, 11), match='hello world'> 返回的是 match 物件,其常用方法如上

print(match)

resule = match = re.findall(pattern,s) # [('hello', 'world')] 在乙個list 裡面包含 tuple

print(resule)

regex = re.compile("[a-z]+") # 採用預編譯的形式

print(regex) # re.compile('[a-z]+')

print( type(regex) ) # , 返回的是 pattern 物件

match = regex.match("hello ") # 因為已經有了正規表示式,所以不需要再 match() 方法中傳入pattern ,否則報錯

print(match) # 返回的是 match 物件

# regex.findall(string)

# regex.match(string)

# regex.split(string)

s = "hello

"p1 = r"<(.+)>" # 非貪婪: <_sre.sre_match object; span=(0, 33), match='hello

'>

p2 = r"<(.+?)>" # 貪婪 : <_sre.sre_match object; span=(0, 6), match=''>

# 貪婪是指: 在找到之後,繼續往下找,找到找到滿足條件最長的字串,re 模組,預設是採用貪婪

# 非貪婪: 找到之後就停止往下找

print( re.match(p2,s))

import re

def test01():

s = "23

" pattern = "23"

res = re.match(pattern=pattern,string=s)

print(res)

res = re.compile(pattern,re.ignorecase) # none

print( res.findall(s) ) # ['23']

def test02():

# findall() 方法

pattern = re.compile(r"\d+") # "\\d+" , "r"\d" 作用都是一樣的

res = pattern.findall("jf34jfda342d") # 返回 list

print(res) # ['34', '342']

def test03():

# split()

s = "fda343dsaf343fdj"

pattern = re.compile(r"\d+")

reslist = pattern.split(s) # 表示按照數字切割

print(reslist) # ['fda', 'dsaf', 'fdj']

def test04():

# 分組

s = "tom34jeck11rose33"

pat = "^tom.+33$" # 表示去匹配 以 tom 開頭, 33結尾的字串

m = re.match(pattern=pat,string=s)

print(m)

print(m.group())

print(m.groups())

def testsearch():

# search()

s = "tom34jeck11rose33"

pat = r"\d+"

pattern = re.compile(pattern=pat)

m = pattern.search(s) # 拿到匹配的字串 ,找到即返回

print(m.group(0)) # 34 , 拿到找到的字串

''' search() : 方法用於找到第乙個匹配的結果 , 找到即返回

findall(): 找到所有匹配的結果,並將所有匹配返回

matcher 物件:表示你全域性匹配 ,正規表示式需要匹配整個字串,然後通過分組,拿出需要取的資料

pat = "^tom.+33$" # 表示去匹配 以 tom 開頭, 33結尾的字串

m = re.match(pattern=pat,string=s)

'''def testgreedy():

# 貪婪 與 非貪婪

s = 'fdj

' patstr = "<.*?>"

patstr2 = "<.*>"

pattern = re.compile(s)

print(re.match(patstr,s))

print(re.match(patstr2,s))

5.1 刪除字串
def test02():

pattern = r"\d+"

text = "abc 234 jeck 45"

text = re.sub(pattern,'',text) # 刪除掉數字

print(text) # abc jeck

5.2 操作分組
def test03():

# 取分組的資訊

pattern = r"(\d+)"

text = "abc 234 jeck 45"

text = re.sub(pattern,r'@\1',text) # 在每個數字前面加上 @ 符號,這裡需要用 'r'轉義才行

print(text) # abc @234 jeck @45

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

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

Python 正規表示式

1.在python中,所有和正規表示式相關的功能都包含在re模組中。2.字元 表示 字串的末尾 如 road 則表示 只有當 road 出現在乙個字串的尾部時才會匹配。3.字元 表示 字元中的開始 如 road 則表示 只有當 road 出現在乙個字串的頭部時才會匹配。4.利用re.sub函式對字串...

Python正規表示式

學習python自然而然就不得不面對正規表示式這個難題。當初在沒有學習python之前,自己也曾經嘗試著學習過正規表示式,但是那時候感覺很麻煩,很難懂,結果就是不了了之。但是現在學習python我用的書是 python基礎教程 第二版 這本書中對re模組的講解很簡單易懂,內容不多但起碼把人領進門了,...