自己總結的一些常用的正規表示式的方法
正規表示式教程
# -*- 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模組的講解很簡單易懂,內容不多但起碼把人領進門了,...