正則匹配以xx開頭以xx結尾的單詞

2022-09-07 15:57:24 字數 1452 閱讀 1432

在字串處理中,正規表示式是一大利器,但其對於初學者而言是存在一定的難度的。

而如何匹配以xx開頭以xx結尾的單詞呢?

假設需要匹配的字串為:site sea sue sweet see case sse ssee loses

需要匹配的為以s開頭以e結尾的單詞。

正確的正則式為:\bs\s*?e\b

無論什麼語言的正則的格式都一樣,下面以python為例來進行**演示:

解釋一下:在python中re.findall函式表示匹配字串中所有的可能選項,findall()裡面第乙個r表示row,忽略正則式中所有的轉義。

text ='site sea sue sweet see case sse ssee loses'

re.findall(r'\bs\s*?e\b',text)

結果為:['site', 'sue', 'see', 'sse', 'ssee']

下面來解釋一下:\b代表單詞的開始或結束,常由標點符號、空格、換行等來作為分隔符

如果前後不加\b,即正規表示式為:s\s*?e

執行結果就變成了

['site', 'se', 'sue', 'swe', 'se', 'se', 'sse', 'sse', 'se']

這樣匹配出來的就是不保證單詞的完整性,只要某乙個單詞中含有s*e都會輸出來。

\s表示任意非空字元,在這個問題中很容易想到的正規表示式是\bs.*?e\b,即將\s寫成.,但是這就會導致另外一種情況,這種情況的輸出為:

['site', 'sea sue', 'sweet see', 'sse', 'ssee']
可以看見出現了sea sue等不是我們所期望的情況出現。

而至於*自然是表示匹配任意多個字元。

而使用\s*?是為什麼呢,為什麼要加呢?這就涉及到正規表示式的懶惰模式了。

如果使用.*表示的就是貪婪模式,而.*?表示的就是懶惰模式。

貪婪模式下會盡量匹配最長的字串,而懶惰模式會盡量匹配最短的字串。

舉個栗子:

對於字串abcgabc

貪婪模式–a.*c–得到的答案為:abcgabc

懶惰模式–a.*?c–得到的答案為:abc,abc

正則匹配開頭和結尾

字元功能 匹配字串開頭 匹配字串結尾 coding utf 8 import re email list xiaowang 163.com xiaowang 163.comheihei com.xiaowang qq.com for email in email list ret re.match ...

正則2 匹配開頭結尾,分組轉義

匹配結尾開頭 簡單判斷email,轉義 分組import re defmain names age age loge age1 a age age 1 age a 123 for name in names ret re.match r a za z a za z0 9 name if ret pr...

正規表示式 匹配開頭和結尾

功能 匹配字串開頭 匹配字串結尾 需求 匹配以數字開頭的資料 import re 匹配以數字開頭的資料 match obj re.match d.3hello if match obj 獲取匹配結果 print match obj.group else print 匹配失敗 執行結果 3hello需...