title: Python
subtitle: 1.re模塊findall函數用法
date: 2018-12-13 10:17:28
Python re 模塊 findall 函數用法簡述
本文檔介紹了正則表達式元字符 和 re模塊 findall 函數用法。
正則表達式元字符
給予正則表達式強大的功能和靈活性。
表 示 法 | 描述 | 正則表達式示例 |
---|---|---|
符號 | ||
literal | 匹配文本字符串的字面值literal | foo |
. | 匹配任何字符(除了\n 之外) | b.b |
^ | 匹配字符串起始部分 | ^Dear |
$ | 匹配字符串終止部分 | /bin/*sh$ |
* | 匹配 0 次或者多次前面出現的正則表達式 | [A-Za-z0-9]* |
+ | 匹配 1 次或者多次前面出現的正則表達式 | [a-z]+.com |
? | 匹配 0 次或者 1 次前面出現的正則表達式 | goo? |
{N} | 匹配 N 次前面出現的正則表達式 | [0-9]{3} |
{M,N} | 匹配 M~N 次前面出現的正則表達式 | [0-9]{5,9} |
[…] | 匹配來自字符集的任意單一字符 | [aeiou] |
[..x−y..] | 匹配 x~y 范圍中的任意單一字符 | [0-9], [A-Za-z] |
[^…] | 不匹配此字符集中出現的任何一個字符,包括某一范圍的字符( 如果在此字符集中出現) | [^aeiou], [^A-Za-z0-9] |
(…) | 匹配封閉的正則表達式,然后另存為子組 | ([0-9]{3})? |
特殊字符 | ||
\d | 匹配任何十進制數字,與[0-9]一致( \D 與\d 相反,不匹配任何非數值型的數字) | data\d+.txt |
\w | 匹配任何字母數字字符,與[A-Za-z0-9_]相同( \W 與之相反) | [A-Za-z_]\w+ |
\s | 匹配任何空格字符,與[\n\t\r\v\f]相同( \S 與之相反) | of\sthe |
\b | 匹配任何單詞邊界( \B 與之相反) | \bThe\b |
\N | 匹配已保存的子組 N(參見上面的(…)) | price: \16 |
\c | 逐字匹配任何特殊字符 c(即,僅按照字面意義匹配,不匹配特殊含義) | \., \\, \* |
\A(\Z) | 匹配字符串的起始(結束)(另見上面介紹的^和$) | \ADear |
擴展表示法 | ||
(?iLmsux) | 在正則表達式中嵌入一個或者多個特殊“標記” 參數(或者通過函數/方法) | (?x),(? im) |
(?:…) | 表示一個匹配不用保存的分組 | (?:\w+.)* |
(?P<name>…) | 像一個僅由 name 標識而不是數字 ID 標識的正則分組匹配 | (?P<data>) |
(?P=name) | 在同一字符串中匹配由(?P<name)分組的之前文本 | (?P=data) |
(?#…) | 表示注釋,所有內容都被忽略 | (?#comment) |
(?=…) | 匹配條件是如果…出現在之后的位置,而不使用輸入字符串;稱作正向前視斷言 | (?=.com) |
(?!…) | 匹配條件是如果…不出現在之后的位置,而不使用輸入字符串;稱作負向前視斷言 | (?!.net) |
(?<=…) | 匹配條件是如果…出現在之前的位置,而不使用輸入字符串;稱作正向后視斷言 | (?<=800-) |
(?<!…) | 匹配條件是如果…不出現在之前的位置,而不使用輸入字符串;稱作負向后視斷言 | (?<!192\.168\.) |
使用到的特殊字符
表 示 法 | 描述 | 正則表達式示例 |
---|---|---|
特殊字符 | ||
\w | 匹配任何字母數字字符,與[A-Za-z0-9_]相同( \W 與之相反) | [A-Za-z_]\w+ |
\s | 匹配任何空格字符,與[\n\t\r\v\f]相同( \S 與之相反) | of\sthe |
findall函數
findall函數返回的總是正則表達式在字符串中所有匹配結果的列表,此處主要討論列表中“結果”的展現方式,即findall中返回列表中每個元素包含的信息。
1. findall
# findall
import re
s = "456123sad 789re3dfheasdf a123fas 123awef q3segd a123dsas"
re0subject1 = re.compile('\w+\s+')
print(re0subject1.findall(s))
> 執行結果:
['456123sad ', '789re3dfheasdf ', 'a123fas ', '123awef ', 'q3segd ']
當給出的正則表達式中不帶括號時,列表的元素為字符串,此字符串為整個正則表達式匹配的內容。
注意:此處出現的匹配是\w+\s+,最后一個字符串沒有空格字符,所以沒有匹配。
# findall
import re
s = "456123sad 789re3dfheasdf a123fas 123awef q3segd a123dsas "
re0subject2 = re.compile('\w+\s+')
print(re0subject2.findall(s))
> 執行結果:
['456123sad ', '789re3dfheasdf ', 'a123fas ', '123awef ', 'q3segd ', 'a123dsas ']
當給出的正則表達式中不帶括號時,列表的元素為字符串,此字符串為整個正則表達式匹配的內容。
2. findall
import re
s = "456123sad 789111re3dfheasdf a123fas 123awef q3segd a123dsas "
# s = "adfad asdfasdf asdfas asdfawef asd adsfas "
re0subject3 = re.compile('(\w+)\s+\w+')
print(re0subject3.findall(s))
> 執行結果:
['456123sad', 'a123fas', 'q3segd']
當給出的正則表達式中帶有一個括號時,列表的元素為字符串,此字符串的內容與括號中的正則表達式相對應(不是整個正則表達式的匹配內容)。
3. findall
import re
s = "456123sad 789111re3dfheasdf a123fas 123awef q3segd a123dsas "
# s = "adfad asdfasdf asdfas asdfawef asd adsfas "
re0subject3 = re.compile('((\w+)\s+\w+)')
print(re0subject3.findall(s))
> 執行結果:
[('456123sad 789111re3dfheasdf', '456123sad'), ('a123fas 123awef', 'a123fas'), ('q3segd a123dsas', 'q3segd')]
當給出的正則表達式中帶有多個括號時,列表的元素為多個字符串組成的元組,元組中字符串個數與括號對數相同,字符串內容與每個括號內的正則表達式相對應,並且排放順序是按括號出現的順序。