由於我在txt裏複製過來後,空格的個數就不知怎的亂了,所以我先把截圖放上來,比較容易看,我會把文本放在文章末尾
#一些匹配時用的符號
#這裏是re模塊中的核心函數
#提示:如果一個正則表達式需要重複的使用,可以通過compile函數編譯正則表達式並創建出正則表達式對象。
# 通過迭代器取出匹配對象並獲得匹配的內容
for temp in pattern.finditer(sentence):
print(temp.group())
# 通過search函數指定搜索位置找出所有匹配
m = pattern.search(sentence)
while m:
print(m.group())
m = pattern.search(sentence, m.end()) #若此句未寫,則會一直重複輸出第一個相匹配的字段
#m.end()返回上一個匹配的最後一個字符的索引值加1的值,本次搜索從此位置開始
#這裏是上面截圖裏的符號和函數
-----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
| 符號 | 解釋 | 示例 | 說明 |
| ------------------------------ | ----------------------------------------- | ------------------------------ | ---------------------------------------------------------------------------------------------- |
| . | 匹配任意字符 | b.t | 可以匹配bat / but / b#t / b1t等 |
| \\w | 匹配字母/數字/下劃線 | b\\wt | 可以匹配bat / b1t / b_t等<br>但不能匹配b#t |
| \\s | 匹配空白字符(包括\r、\n、\t等) | love\\syou | 可以匹配love you |
| \\d | 匹配數字 | \\d\\d | 可以匹配01 / 23 / 99等 |
| \\b | 匹配單詞的邊界 | \\bThe\\b | |
| ^ | 匹配字符串的開始 | ^The | 可以匹配The開頭的字符串 |
| $ | 匹配字符串的結束 | .exe$ | 可以匹配.exe結尾的字符串 |
| \\W | 匹配非字母/數字/下劃線 | b\\Wt | 可以匹配b#t / b@t等<br>但不能匹配but / b1t / b_t等 |
| \\S | 匹配非空白字符 | love\\Syou | 可以匹配love#you等<br>但不能匹配love you |
| \\D | 匹配非數字 | \\d\\D | 可以匹配9a / 3# / 0F等 |
| \\B | 匹配非單詞邊界 | \\Bio\\B | |
| [] | 匹配來自字符集的任意單一字符 | [aeiou] | 可以匹配任一元音字母字符 |
| [^] | 匹配不在字符集中的任意單一字符 | [^aeiou] | 可以匹配任一非元音字母字符 |
| * | 匹配0次或多次 | \\w* | |
| + | 匹配1次或多次 | \\w+ | |
| ? | 匹配0次或1次 | \\w? | |
| {N} | 匹配N次 | \\w{3} | |
| {M,} | 匹配至少M次 | \\w{3,} | |
| {M,N} | 匹配至少M次至多N次 | \\w{3,6} | |
| \| | 分支 | foo\|bar | 可以匹配foo或者bar |
| (?#) | 註釋 | | |
| (exp) | 匹配exp並捕獲到自動命名的組中 | | |
| (? <name>exp) | 匹配exp並捕獲到名爲name的組中 | | |
| (?:exp) | 匹配exp但是不捕獲匹配的文本 | | |
| (?=exp) | 匹配exp前面的位置 | \\b\\w+(?=ing) | 可以匹配I'm dancing中的danc |
| (?<=exp) | 匹配exp後面的位置 | (?<=\\bdanc)\\w+\\b | 可以匹配I love dancing and reading中的第一個ing |
| (?!exp) | 匹配後面不是exp的位置 | | |
| (?<!exp) | 匹配前面不是exp的位置 | | |
| *? | 重複任意次,但儘可能少重複 | a.\*b<br>a.\*?b | 將正則表達式應用於aabab,前者會匹配整個字符串aabab,後者會匹配aab和ab兩個字符串 |
| +? | 重複1次或多次,但儘可能少重複 | | |
| ?? | 重複0次或1次,但儘可能少重複 | | |
| {M,N}? | 重複M到N次,但儘可能少重複 | | |
| {M,}? | 重複M次以上,但儘可能少重複 | | |
-----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
re模塊中的核心函數。
----------------------------------------------------------------------------------------------------------------------------------------------------------
| 函數 | 說明 |
| ---------------------------------------------------- | ------------------------------------------------------------------------------------------------- |
| compile(pattern, flags=0) | 編譯正則表達式返回正則表達式對象 |
| match(pattern, string, flags=0) | 用正則表達式匹配字符串 成功返回匹配對象 否則返回None |
| search(pattern, string, flags=0) | 搜索字符串中第一次出現正則表達式的模式 成功返回匹配對象 否則返回None |
| split(pattern, string, maxsplit=0, flags=0) | 用正則表達式指定的模式分隔符拆分字符串 返回列表 |
| sub(pattern, repl, string, count=0, flags=0) | 用指定的字符串替換原字符串中與正則表達式匹配的模式 可以用count指定替換的次數 |
| fullmatch(pattern, string, flags=0) | match函數的完全匹配(從字符串開頭到結尾)版本 |
| findall(pattern, string, flags=0) | 查找字符串所有與正則表達式匹配的模式 返回字符串的列表 |
| finditer(pattern, string, flags=0) | 查找字符串所有與正則表達式匹配的模式 返回一個迭代器 |
| purge() | 清除隱式編譯的正則表達式的緩存 |
| re.I / re.IGNORECASE | 忽略大小寫匹配標記 |
| re.M / re.MULTILINE | 多行匹配標記 |
----------------------------------------------------------------------------------------------------------------------------------------------------------