一.正規表示式
正規表示式是乙個用特殊符號表示的字串行,用來檢查乙個字串是否與某種字串模式匹配。
較常用的正規表示式有:
正規表示式
匹配物件
普通字元
匹配對應的字元
\n匹配換行符
\t匹配製表符
\d匹配十進位制數字
\d匹配除了十進位制數字的其他字元
\w匹配字母,數字,下劃線
\w匹配除了字母,數字,下劃線的其他字元
\s匹配空白字元(space)
\s匹配除了空白字元的其他字元
[***xx]
匹配內的任意乙個
[^***x]
匹配除了內***x的任意字元
.匹配除換行符外的任意乙個
^匹配字串起始位置
$匹配字串結尾位置
*前乙個字元出現0或1或…次
?前乙個字元出現0或1次
+前乙個字元出現1或多次
前一字元恰好出現n次
前乙個字元至少出現n次
前乙個字元出現n~m次
()模式匹配單元:()內為要提取的內容
記憶:1."\小寫"和"\大寫"互為否定(例:\d匹配十進位制數字,\d則匹配非十進位制數字)。
2.「在原子表內,^符號表示取否定意義」(例:[123]匹配123內任意乙個,[ ^123]匹配除了123的其他任意字元)
二.python處理正規表示式
python處理正規表示式主要通過re模組,處理時import該模組。
import re
主要介紹re模組中三個較常用的匹配函式(match,search,findall):
(1)re.match(pattern, string, flags)
函式的三個引數分別為正規表示式,模式串,可選引數(修改匹配某些規則)
常用的可選引數及其含義:
可選引數
含義re.i
使匹配忽略大小寫
re.s
使.也可以匹配換行符
從模式起始位置匹配模式串,若從起始位置匹配不成功,match()就返回none[即:匹配成功的位置必須包括起始處]
print
(re.match(r"py"
,"python"))
#out:
print
(re.match(r"py"
,"python"
).span())
#span()返回匹配位置索引
#out:(0, 2)
print
(re.match(r"py"
,"python"
).group())
#返回匹配到的物件
#out:py
print
(re.match(r"th"
,"python"))
#不能從模式串的起始位置匹配
#out:none
print
(re.match(r"py"
,"python"
,re.i)
)#可選引數使匹配不區分大小寫
#out:
正規表示式前的r的含義指此字串為一普通字串,即轉義字元不使用其轉義含義。
(2)re.search(pattern, string, flags)
函式的形參意義同上,此函式是掃整個模式串進行匹配,不用像match那樣必須包括模式串起始位置。
例子的正規表示式的含義:從y開始,然後後面可以包括零個或多個除了換行符之外的字元(詳細看上面**中各正規表示式的組合含義)。
(字串的匹配預設為貪心方式:即如果滿足條件則匹配越多越好)。
print
(re.search(
"y.*"
,"pypypy"))
#out:
print
(re.search(
"y.*"
,"pypypy"
).span())
#out:(1, 6)
print
(re.search(
"y.*"
,"pypypy"
).group())
#out:ypypy
print
(re.search(
"a.*"
,"pypypy"))
#out:none
re.match只匹配字串的開始,如果字串開始不符合正規表示式,則匹配失敗,函式返回none;而re.search匹配整個字串,直到找到乙個匹配。
(3)re.findall(string,start(起始位置索引,可選,預設為0),end(結束位置索引,不包括該位置,可選,預設為len))
在字串中找到正規表示式所匹配的所有子串
(注意: match 和 search 是匹配一次 ,findall 匹配所有)
同時,使用findall要先把正規表示式編譯出來,這裡要用到另乙個函式compile(pattern,flag)用來編譯字串(可寫入可選引數修改匹配規則)。
reg=r"py*"
#匹配p及連著0個或多個y
print
(re.
compile
(reg)
.findall(
"py-py-pyy"))
#out:['py', 'pyy']
print
(re.
compile
(reg,re.i)
.findall(
"py-py-pyy"))
#匹配不區分大小寫
#out:['py', 'py', 'pyy']
print
(re.
compile
(reg)
.findall(
"py-py-pyy",1
,7))
#指定起始及終止位置
#out:['p']
三.匹配方式
主要分為兩種方式:
1.貪心/貪婪模式(預設為這種模式)
此方式即為在滿足條件的情況下匹配的字元越多越好。
reg=r"py*"
#匹配p及連著0個或多個y,貪婪模式匹配滿足條件的最多個y
print
(re.
compile
(reg)
.findall(
"py-py-pyy"))
#out:['py', 'pyy']
2.精準/懶惰模式:
(1)*?
(2)+?
reg=r"py*?"
#此*?組合開啟精準模式,原來y可匹配0個或多個,現在匹配最少(即0個就結束)
print
(re.
compile
(reg)
.findall(
"py-py-pyy"))
#out:['p', 'p']
這兩種字元組合在一起後即表示精準模式,即匹配成功就停止。 正規表示式處理字元(Python)
匹配任意乙個字元,除了換行符 匹配0個或多個表示式 匹配1個或多個表示式 匹配任意長度字串 s匹配任意空白字元,等價於 t n r f s匹配任意非空字元 w匹配字母數字和下劃線 d匹配任意數字 精確匹配n個前面表示式 如 d 匹配字串開頭 匹配字串結尾 內建庫re re.match re.matc...
python正規表示式元字元 正規表示式
字元 描述將下乙個字元標記為乙個特殊字元 或乙個原義字元 或乙個 向後引用 或乙個八進位制轉義符。例如,n 匹配字元 n n 匹配乙個換行符。序列 匹配 而 則匹配 匹配輸入字串的開始位置。如果設定了 regexp 物件的 multiline 屬性,也匹配 n 或 r 之後的位置。匹配輸入字串的結束...
正規表示式相關 正規表示式處理html內容
前面關於顯示html文字用了瀏覽器控制項來處理 這個不過是為了解決燃眉之急不得已才使用。其實最好還是使用正規表示式處理,也就是自己寫乙個html文字直譯器,當然這個實現起來也是不容易的,首先你得將所有html文字標籤羅列出來,然後一一翻譯。下面先搞乙個簡單的例子吧。public static str...