您好,登錄后才能下訂單哦!
這篇文章給大家分享的是有關python正則表達式及使用正則表達式的示例分析的內容。小編覺得挺實用的,因此分享給大家做個參考,一起跟隨小編過來看看吧。
正則表達式
正則表達用來匹配字符串
正則表達式匹配過程
依次拿出表達式和文本中的字符串進行比價
如果每個字符都能匹配,則匹配成功;一旦有匹配不成功的字符,則匹配失敗
如果有量詞和邊界,則匹配過程稍微有些不同
正則表達式語法規則
語法 | 說明 | 表達式實例 | 匹配字符串 |
字符 | |||
. | 匹配除換行"\n"外的任意字符串 | abc | abc |
\ | 轉義字符,使后一個字符改變原來的意思 | a\\c | a\c |
[...] | 字符集,對應的位置可以是字符集中任意字符,字符集中的字符可以逐個列出,也可以給出范圍,如[abc]或[a-c]。第一個字符如果是^則表示取反,如[^abc]表示不是abc中的其他字符。所有的特殊的字符在字符集中都失去其原有的特殊含義。在字符集中使用^、]或-,可以使用轉義字符匹配它們 | a[bcd]e | abe ace ade |
預定義字符集 | |||
\d | 數字:[0-9] | a\dc | a1c |
\D | 非數字:[^0-9] | a\Dc | abc |
\s | 空白字符:[<空格>\t\r\n\f\v] | a\sc | a c |
\S | 非空白字符:[^\s] | a\Sc | abc |
\w | 單詞字符:[a-zA-z0-9_] | a\wc | abc |
\W | 非單詞字符:[^\w] | a\Wc | a c |
數量詞 | |||
* | 匹配一個字符串0或無限次 | abc* | ab abc abccc |
+ | 匹配一個字符串1次或無限次 | abc+ | abc abccc |
? | 匹配一個字符串0次或1次 | abc? | ab abc |
{m} | 匹配一個字符串m次 | abc{2} | abcc |
{m,n} | 匹配一個字符串m到n次 | abc{2,3} | abcc abccc |
邊界匹配 | |||
^ | 匹配字符串開頭 | ^abc | abc |
$ | 匹配字符串末尾 | abc$ | abc |
\A | 匹配字符串開始 | \Aabc | abc |
\Z | 匹配字符串結束,如果是存在換行,只匹配到換行前的結束字符串 | abc\Z | abc |
\b | 匹配一個單詞邊界,也就是指單詞和空格間的位置。例如, 'er\b' 可以匹配"never" 中的 'er',但不能匹配 "verb" 中的 'er'。 | ||
\B | 匹配非單詞邊界。'er\B' 能匹配 "verb" 中的 'er',但不能匹配 "never" 中的 'er'。 | ||
邏輯分組 | |||
| | 匹配|表達式左右的任意一個 | abc|def | abc def |
(...) | 作為分組,每遇到一個(,分組編號加1,使用分組的好處是匹配的子串會保存到一個子組,便于以后使用 | (abc){2} | abcabc |
(?P<name>...) | 分組除原有編號外,再加一個別名 | (?P<id>abc){2} | abcabc |
\<number> | 引用編號為number的分組匹配到的字符串 | (\d)ab\1 | 1ab1 5ab5 |
(?P=name) | 應用別名為name的分組匹配到的字符串 | (?P<id>abc)ee(?P=name) | abceeabc |
特殊構造(不分組) | |||
(?:...) | (...)的不分組版本,用于|或后接數量詞 | (?:abc){2} | abcabc |
(?iLmsux) | iLmsux中的每個字符代表正則表達式的一種匹配模式,只能用在正則表達式開頭,可選多個 | (?i)abc | AbC |
(?#...) | 將#后面的字符當做注釋忽略 | abc(?#comment)def | abcdef |
(?=...) | 之后的字符串表達式需要匹配才能成功,不消耗字符串內容 | a(?=\d) | 后面是數字的a |
(?!...) | 之后的字符串表達式需要不匹配才能成功,不消耗字符串內容 | a(?!\d) | 后面不是數字的a |
(?<=...) | 之前的字符串表達式需要匹配才能成功,不消耗字符串內容 | (?<=\d)a | 前面是數字的a |
(?<!...) | 之前的字符串表達式需要不匹配才能成功,不消耗字符串內容 | (?<!\d)a | 前面不是數字的a |
(?(id/name)yes_ pattern|no_parttern) | 如果匹配到分組為id或別名name的字符串成功匹配,則需要匹配yes_pattern 不成功,怎需要匹配no_pattern | (\d)abc(?(1)\d|def) | 1abc3 abcdef |
貪婪模式和非貪婪模式
貪婪模式是盡可能多的匹配字符串,python默認為貪婪模式,非貪婪模式盡可能少的匹配字符串,在正則表達式后面加個?表示非貪婪模式。例如:字符串abcccb,貪婪模式正則表達式為ab.*c,非貪婪模式的正則表達式為ab.*?c,貪婪模式結果為abccc,非貪婪模式結果為abc,再比如字符串abbb,貪婪模式正則表達式為ab?,非貪婪模式正則表達為ab??,貪婪模式結果為ab,非貪婪結果為a。
python的re模塊
re模塊的方法:
1.compile(pattern[,flag]):對正則表達式pattern進行編譯,編譯后比直接查找速度快
2.match(patter,string[,flag]):從字符串string的開始就匹配,若匹配成功,則返回匹配對象,否則返回None(None對象沒有group()和groups()方法,不判斷直接調用這兩個方法,則會出現異常)
3.search(pattern,string[,flag]):從字符串中查找,若匹配成功,則返回匹配對象,否則返回None
4.findall(pattern,string[,flag]):在字符串 string 中查找正則表達式模式 pattern 的所有(非重復)出現;返回一個匹配對象的列表
5.finditer(pattern,string[, flags])b 和 findall()相同,但返回的不是列表而是迭代器;對于每個匹配,該迭代器返回一個匹配對象
6.split(pattern,string, max=0) 根據正則表達式 pattern 中的分隔符把字符 string 分割為一個列表,返回成功匹配的列表,最多分割 max 次(默認是分割所有匹配的地方)
7.sub(pattern, repl, string, max=0) 把字符串 string 中所有匹配正則表達式 pattern 的地方替換成字符串 repl,如果 max 的值沒有給出, 則對所有匹配的地方進行替換
匹配對象的方法和屬性:
string:匹配時所使用的文本
re:匹配時使用的pattern對象
group(num=0) 返回全部匹配對象(或指定編號是 num 的子組)
groups() 返回一個包含全部匹配的子組的元組(如果沒有成功匹配,就返回一個空元組)
參數flag:
re.I | 使匹配對大小寫不敏感 |
re.L | 做本地化識別(locale-aware)匹配 |
re.M | 多行匹配,影響 ^ 和 $ |
re.S | 使 . 匹配包括換行在內的所有字符 |
re.U | 根據Unicode字符集解析字符。這個標志影響 \w, \W, \b, \B. |
re.X | 該標志通過給予你更靈活的格式以便你將正則表達式寫得更易于理解。 |
python使用正則表達式的例子
>>> import re >>> pattern = re.compile(r'foo') >>> res1 = re.search(pattern,'foo') >>> res1.group() # 返回的是匹配對象,需要調用group()方法,顯示所有的匹配對象 'foo' >>> res1.groups()# 因為沒有子組(即正則表達式中沒有分組),返回空元組 () >>> res2 = re.findall(pattern,'foobbfoo') >>> res2 # 直接返回的是一個列表,包含所有匹配的字符 ['foo', 'foo'] >>> pattern2 = re.compile(r'(\d+)aa') >>> res3 = re.search(pattern2,'bb32aa') >>> res3.group() # 返回所有的匹配的對象 '32aa' >>> res3.groups() # 對比res1的groups(),正則里有分組,返回匹配到的分組 ('32',) >>> res4 = re.findall(pattern2,'bb32aacc5aacc') >>> res4 # 對比res2,返回一個列表,但只包含所匹配分組里面的字符, ['32', '5']
感謝各位的閱讀!關于“python正則表達式及使用正則表達式的示例分析”這篇文章就分享到這里了,希望以上內容可以對大家有一定的幫助,讓大家可以學到更多知識,如果覺得文章不錯,可以把它分享出去讓更多的人看到吧!
免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。