#原文:
#coding=utf-8
#regular.py 正規表示式
import re #
正則模組
defregular():
data = "
she is more than pretty. 520"#
--- 正則 ---
reg = r"mo"
#指定字元 => span=(7, 9), match='mo'
reg = r"."
#(.)單個字元 => span=(0, 1), match='s'
reg = r"\."
#(\)轉義符 => span=(23, 24), match='.'
reg = r"
[.]"
#()字元集合(注意:部分特殊字元失去特殊意義) => span=(23, 24), match='.'
reg = r"
[love]"#
內任意字元 => span=(2, 3), match='e'
reg = r"
[i-u]"#
(-)範圍 => span=(4, 5), match='i'
reg = r"t"
#{}內為長度(3個6) => span=(20, 22), match='tt'
reg = r"t"
# / / => span=(12, 13), match='t'
reg = r"
(i|o|u)"#
(())組 => span=(4, 5), match='i'
reg = r"^s"
#(^)開頭 => span=(0, 1), match='s'
reg = r"
[^s]"#
([^])取反(不含h) => span=(1, 2), match='h'
reg = r"
520$"#
($)結尾 => span=(25, 28), match='520'
reg = r"
et*"
#(*)匹配個表示式 => ['e', 'e', 'ett']
reg = r"
et+"
#(+)匹配個表示式 => ['ett']
reg = r"
et?"
#(?)匹配個表示式 => ['e', 'e', 'et']
reg = r"
.+?e"#
(?)非貪婪模式(span=(0, 20), match='she is more than pre' => span=(0, 3), match='she')
reg = r"
\145"#
ascii標的8進製數(145=101=e) => span=(2, 3), match='e'
reg = r"\d"
#(\d)單個數字 => span=(25, 26), match='5' (推薦:[0-9])
reg = r"\d"
#(\d)非數字 => span=(0, 1), match='s' (推薦:[^0-9])
reg = r"\s"
#(\s)空白字元 => span=(3, 4), match=' ' (推薦:[\t\n\r\f\v])
reg = r"\s"
#(\s)非空白字元 => span=(0, 1), match='s' (推薦:[^\t\n\r\f\v])
reg = r"\w"
#(\w)單詞 => span=(0, 1), match='s' (推薦:[a-za-z0-9_])
reg = r"\w"
#(\w)非單詞 => span=(3, 4), match=' ' (推薦:[^a-za-z0-9_])
reg = r"
\as"
#(\a)開頭 => span=(0, 1), match='s'
reg = r"
520\z"#
(\z)結尾 => span=(25, 28), match='520'
reg = r"
y\b"
#(\b)單詞邊界(hello) => span=(22, 23), match='y'
reg = r"
o\b"
#(\b)非單詞邊界(world) => span=(8, 9), match='o'
reg = r"
[01]\d\d|2[0-4]\d|25[0-5]"#
或(|) 多位數(匹配0 - 255 直接的數字)
index = re.search(reg, data) #
查詢單個匹配項
index = re.match(r"
she", data) #
匹配開頭 => span=(0, 3), match='she'
index = re.fullmatch(r"
.+", data) #
匹配全部 => span=(0, 28), match='she is more than pretty. 520'
lists = re.findall(reg, data) #
查詢所有匹配項(列表)
lists = re.split(r"
o", data, maxsplit=1) #
根據正則分割字串(maxsplit分割次數) => ['she is m', 're than pretty. 520']
strs = re.sub(r"
\.", r"
!", data, count=1) #
替換(count:替換次數)(匹配替換,未匹配原樣) => she is more than pretty! 520
re.purge()
#清除正規表示式快取
#--- 正規表示式物件 ---
pat = re.compile(r"
e") #
編譯成正則物件
#匹配模式有(使用|組合): re.debug / re.i(ignorecase)不區分大小寫 / re.l(locale) / re.m(multiline) / re.s(dotall) 匹配任何字元, '.'含換行, 沒有此標誌, '.'除換行符 / re.u(unicode) / re.x(verbose)
pat = re.compile(r"
e", re.s|re.i)
index = pat.search(data) #
查詢單個匹配項 => span=(2, 3), match='e'
index = pat.search(data, 5) #
=> span=(10, 11), match='e'
index = pat.search(data, 1, 10)
index = pat.match(data) #
匹配開頭 => none
index = pat.match(data, 2) #
=> span=(2, 3), match='e'
index = pat.match(data, 1, 10)
index = pat.fullmatch(data) #
匹配全部 => none
index = pat.fullmatch(data, 2) #
=> none
index = pat.fullmatch(data, 2, 3) #
span=(2, 3), match='e'
lists = pat.split(data, maxsplit=0) #
分割 => ['sh', ' is mor', ' than pr', 'tty. 520']
lists = pat.findall(data) #
查詢全部 => ['e', 'e', 'e']
lists = pat.findall(data, 5) #
=> ['e', 'e']
lists = pat.findall(data, 1, 10) #
=> ['e']
strs = pat.sub(r"
o", data, count=0) #
替換 => sho is moro than protty. 520
#--- match ---
match =index;
#span=(2, 3), match='e'
strs = match.string #
被匹配的資料 => she is more than pretty. 520
strs = match.group() #
獲取 match(匹配到的) 資料 => e
pos = match.pos #
起始座標
pos = match.endpos #
結束座標
index.span()[0] #
match(匹配到)的起始座標 => 2
index.span()[1] #
match的結束座標 => 3
if__name__ == "
__main__":
regular()
python正規表示式及使用正規表示式的例子
正規表示式 正則表達用來匹配字串 正規表示式匹配過程 正規表示式語法規則 匹配除換行 n 外的任意字串 abcabc 轉義字元,使後乙個字元改變原來的意思 a c a c 字符集,對應的位置可以是字符集中任意字元,字符集中的字元可以逐個列出,也可以給出範圍,如 abc 或 a c 第乙個字元如果是 ...
使用正規表示式
如果原來沒有使用過正規表示式,那麼可能對這個術語和概念會不太熟悉。不過,它們並不是您想象的那麼新奇。請回想一下在硬碟上是如何查詢檔案的。您肯定會使用 和 字元來幫助查詢您正尋找的檔案。字元匹配檔名中的單個字元,而 則匹配乙個或多個字元。乙個如 data?dat 的模式可以找到下述檔案 data1.d...
使用正規表示式
本文節選自 並有稍微修正。使用正規表示式 您可以使用正規表示式做很多事情。在以下的列表中,您可以找到一些最普通 最常用的正規表示式的例子。表示文字串必須在一行的開頭。所以,當查詢行的開頭只為 hosts 的行,可以使用命令 grep ls hosts 代表了一行的結尾。所以,當查詢行的結尾只為 ho...