1.元字元
(1)匹配邊界
^匹配行首
$匹配行尾
(2)重複次數
?0或1次
*>=0次
+>=1次
>=n次
>=n,<=m次
n次(3)單個字元
[a-z0-9a-z]
匹配括號中字元的任意乙個
\d數字
\w數字、字母、下劃線
\s空白字元(空格、\t、\n)
\b單詞的開始和結束
.匹配任意字元(除換行)
2.使用步驟
(1).將正規表示式編譯成乙個pattern物件
pattern = re.compile('正規表示式')
(2).通過pattern提供的方法進行查詢匹配
(3).通過使用match物件的方法獲取結果
3.match物件的方法:
match.group(0)----獲取匹配結果
match.group()----獲取匹配結果
match.span()----獲取匹配範圍
match.start()---匹配開始位置
match.end()---匹配結束位置
4.pattern物件的方法
(1)match方法:預設從頭開始匹配,只匹配一次,返回乙個match物件。
pattern.macth(
'要匹配的字串',必須指定,
start,匹配的開始位置(可選)
end,匹配的結束位置。(可選)
)
案例
import re
content = 'one123two456three'
### 將正規表示式轉換為python物件
pattern = re.compile(r'\d+')
### 使用轉換的規則去字串中匹配指定內容
result1 = pattern.match(content) ## none
### 指定匹配的範圍
result2 = pattern.match(content,3,10)
(2)serach方法:從任意位置匹配,只匹配一次,返回乙個match物件。
pattern.search(
'要匹配的字串',必須指定,
start,匹配的開始位置(可選)
end,匹配的結束位置。(可選)
)
案例
import re
content = 'one123two456three'
### 將匹配規則轉換為python物件
pattern = re.compile(r'\d+')
## search()進行匹配
result = pattern.search(content)
(3)findall:全文匹配,將匹配到的結果放到乙個list中返回給我們,多次匹配。
pattern.findall(
'要匹配的字串',必須指定,
start,匹配的開始位置(可選)
end,匹配的結束位置。(可選)
)
案例
import re
content = 'one123two456three'
### 將正規表示式轉換為python物件
pattern = re.compile(r'\d+')
### 使用轉換的規則去字串中匹配指定內容
### 返回的是乙個包含所有匹配結果的列表
result = pattern.findall(content)
(4)finditer:全文匹配,多次匹配,返回乙個包含匹配結果的迭代器。
pattern.finditer(
'要匹配的字串',必須指定,
start,匹配的開始位置(可選)
end,匹配的結束位置。(可選)
)
案例
import re
content = 'one123two456three'
### 將正規表示式轉換為python物件
pattern = re.compile(r'\d+')
### 使用轉換的規則去字串中匹配指定內容
### 返回的是乙個包含所有匹配結果的列表
result = pattern.findall(content)
for res in result:
print(res.group())
(5)sub:用指定的字串,替換正規表示式匹配的到目標字串的內容。
pattern.sub(
repl,替換成什麼。
content,替換什麼。
count,可以不指定,替換的次數。預設替換所有。
)'''
(1)repl可以是字串,也可以是函式。
當repl是函式的時候,這個函式有一下要求:
1,函式必須帶乙個引數,這個引數是乙個match物件。
def func(match):
'''對match物件的操作。
'''2.當在sub方法裡面傳入這個引數時,這個match物件其實就是用正則匹配到的每乙個match物件。
3.這個函式是有返回值的,返回值必須是乙個字串,將來是用這個字串進行替換目標字串的。
(2)函式匹配原理:
(1).首先根據正則在原串中進行匹配
(2).將匹配到的結果傳給函式作為引數
(3).對傳過來的內容進行修改
'''
案例
(1)repl是字串
content = 'hello 123,hello 456'
pattern = re.compile(r'(\w+) (\w+)')
result1 = pattern.sub('hello world',content)
(2)repl是函式
content2 = 'zhangsan:3000,lisi:4000'
### 目的:使數字均加上20000
pattern = re.compile(r'\d+')
def add(match):
return str(int(match.group())+20000)
result = pattern.sub(add,content2)
print(result)
(6)split:切分字串,按照整個表示式所指定的內容切分。
str.split(',')
pattern.split(
'要切分的字串',
切分的次數。不指定就是預設,預設全部切割
)
5.正規表示式中的分組
分組時通過()來表示的,乙個括號就表示乙個分組。
分組的作用:
(1)篩選特定內容。
取分組內容可以通過match物件的group方法來去。
group(1)表示取正規表示式中第乙個括號的內容,依次類推。
import re
content = ''
pattern = re.compile(r''
pattern = re.compile(r'.*?"(.*?)".*?"(.*?)".*?')
match = pattern.search(content)
print(match)
print(match.group(1))
print(match.group(2))
正規表示式 正規表示式 總結
非負整數 d 正整數 0 9 1 9 0 9 非正整數 d 0 負整數 0 9 1 9 0 9 整數 d 非負浮點數 d d 正浮點數 0 9 0 9 1 9 0 9 0 9 1 9 0 9 0 9 0 9 1 9 0 9 非正浮點數 d d 0 0 負浮點數 正浮點數正則式 英文本串 a za z...
正規表示式 表示式
網域名稱 a za z0 9 a za z0 9 a za z0 9 a za z0 9 interneturl a za z s 或 http w w w 手機號碼 13 0 9 14 5 7 15 0 1 2 3 5 6 7 8 9 18 0 1 2 3 5 6 7 8 9 d 號碼 x x x...
Linux正規表示式 編寫正規表示式
為了所有實用化的用途,你可以通過使用程式產生正確的結果。然而,並不意味著程式總是如你所願的那樣正確地工作。多數情況下,如果程式不能產生想要的輸出,可以斷定真正的問題 排除輸入或語法錯誤 在於如何描述想要的東西。換句話說,應該考慮糾正問題的地方是描述想要的結果的表示式。表示式不完整或者公式表示得不正確...