6.13自我總結
1.re模塊
1.re.findall()
1.基本用法
re.findall(正則匹配的格式,匹配的對象)
2.正則匹配常用格式
1.^
只匹配開頭在多行模式中匹配每一行的開頭
2.a|b
匹配的格式a或者b
3[]
-
[a,b]匹配的格式a或者b如果ab為多個值他會把里面的東西打散
-
[1-9]數字1-9
-
[a-z]字母a-z
-
[A-Z]字母A-Z
-
[^x]內容不等於x
4.$
a$ 匹配已a 結尾的
5..
代表任意字符
6.{}
- {n}代表大括號前字符n個
- {n,m}代表大括號前字符n-m個
- {n,}代表大括號前字符n-多個
- {+,}代表大括號前字符1-多個
- {0,}代表大括號前字符0-多個
7.*
代表前面字符0-無窮大個
8.+
代表前面字符1-無窮大個
9.?
- a?代表a字符0-1個
- ?a,前面值是+或者*的時候?匹配內容a結束
10.特殊序列符號
特殊序列符號 | 意義 |
---|---|
\A | 只在字符串開始進行匹配(多行字符串值匹配第一行) |
\Z | 只在字符串結尾進行匹配(多行字符串只匹配最后一行) |
\b | 匹配位於開始或結尾的空字符串 |
\B | 匹配不位於開始或結尾的空字符串 |
\d | 相當於[0-9] |
\D | 相當於[^0-9] |
\s | 匹配任意空字符:[\t\n\r\r\v] |
\S | 匹配任意非空字符:[^\t\n\r\r\v] |
\w | 匹配任意數字和字母:[a-zA-Z0-9] |
\W | 匹配任意非數字和字母:[^a-zA-Z0-9] |
11.()
括號里面什么到時候取什么
12.re.findall(正則匹配的格式,匹配的對象,re.S)
re.S的作用:
不使用re.S時,則只在每一行內進行匹配,如果存在一行沒有,就換下一行重新開始,使用re.S參數以后,正則表達式會將這個字符串看做整體,在整體中進行匹配
import re
a = """sdhellolsdlfsdfiooe:
yy988989pythonafsf"""
b = re.findall('hello(.*?)python',a)
c = re.findall('hello(.*?)python',a,re.S)
print (b)
print(c)
輸出結果:
b:[]
c:['lsdlfsdfiooe:\nyy988989']
其他參數
修飾符 | 描述 |
---|---|
re.I | 使匹配對大小寫不敏感 |
re.L | 做本地化識別(locale-aware)匹配 |
re.M | 多行匹配,影響 ^ 和 $ |
re.S | 使 . 匹配包括換行在內的所有字符 |
re.U | 根據Unicode字符集解析字符。這個標志影響 \w, \W, \b, \B. |
re.X | 該標志通過給予你更靈活的格式以便你將正則表達式寫得更易於理解 |
2.re.match和re.search
# match 和 search的區別,mathch從開頭開始匹配找一個,search搜索所有找第一個
3.re.compile
定義某種搜索格式
res1 = re.compile('\d+')
res1.findall(查找對象)等同於re.findall('\d+',查找對象)
4.re.split()
就是字符串的split方法,區別是可以使用正則表達式去替換
5.re.sub和re.subu
就是字符串的replace方法,區別是可以使用正則表達式去替換
import re
s = '豬八戒的媳婦是1高翠蘭,孫悟空的媳婦是2白骨精,唐僧的媳婦是3女兒國王,沙悟凈6沒有媳婦(py9的學生們)'
print(re.sub('\d','',s))
print(re.subn('\d','',s)) # 除了會修改內容,還會返回修改了多少次
豬八戒的媳婦是高翠蘭,孫悟空的媳婦是白骨精,唐僧的媳婦是女兒國王,沙悟凈沒有媳婦(py的學生們)
('豬八戒的媳婦是高翠蘭,孫悟空的媳婦是白骨精,唐僧的媳婦是女兒國王,沙悟凈沒有媳婦(py的學生們)', 5)
6.對照表
語法 | 意義 | 說明 |
---|---|---|
"." | 任意字符 | |
"^" | 字符串開始 | '^hello'匹配'helloworld'而不匹配'aaaahellobbb' |
"$" | 字符串結尾 | 與上同理 |
"*" | 0 個或多個字符(貪婪匹配) | <*>匹配<\title>chinaunix</title> |
"+" | 1 個或多個字符(貪婪匹配) | 與上同理 |
"?" | 0 個或多個字符(貪婪匹配) | 與上同理 |
*?,+?,?? | 以上三個取第一個匹配結果(非貪婪匹配) | <*>匹配<\title> |
{m,n} | 對於前一個字符重復m到n次,{m}亦可 | a{6}匹配6個a、a{2,4}匹配2到4個a |
{m,n}? | 對於前一個字符重復m到n次,並取盡可能少 | ‘aaaaaa’中a{2,4}只會匹配2個 |
"\" | 特殊字符轉義或者特殊序列 | |
[] | 表示一個字符集 | [0-9]、[a-z]、[A-Z]、[^0] |
"|" | 或 | A|B,或運算 |
(...) | 匹配括號中任意表達式 | |
(?#...) | 注釋,可忽略 | |
(?=...) | Matches if ... matches next, but doesn't consume the string. | '(?=test)' 在hellotest中匹配hello |
(?!...) | Matches if ... doesn't match next. | '(?!=test)' 若hello后面不為test,匹配hello |
(?<=...) | Matches if preceded by ... (must be fixed length). | '(?<=hello)test' 在hellotest中匹配test |
(?<!...) | Matches if not preceded by ... (must be fixed length). | '(?<!hello)test' 在hellotest中不匹配test |