re模塊findall函數用法



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')]

當給出的正則表達式中帶有多個括號時,列表的元素為多個字符串組成的元組,元組中字符串個數與括號對數相同,字符串內容與每個括號內的正則表達式相對應,並且排放順序是按括號出現的順序。


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM