正規表示式應用起來的確得心應手。譬如,驗證乙個字串是否數字字串,/d+/,確實比逐個檢查字元,用「或」連線10個判斷(是否0-9之間的字元)要方便。
譬如要找出這樣的字串:
aba, aabaa, aaabaaa……
也就是這樣的字串:在字母b的前後,字母a連續出現的次數一樣多
這種問題,正規表示式確實能解決。但如果要僅僅用「一條正規表示式」來解決,目前只有perl的正規表示式強大到這種程度,其它語言中的正規表示式,恐怕做不到這一點。
正規表示式寫作
(?然後比較group 1和group 2的長度,就可以滿足要求了。
這裡解釋一下開頭和結尾的兩個結構:
在應用正規表示式時,記住新增一些用於判斷的「錨點」(anchor),準確地表達我們的意圖,是乙個好習慣。
另一類常見的問題是,沒有找到合適的思路,於是寫不出正確的表示式。
譬如要處理類似這樣的字串(這個字串太神奇,但確實有人問起):
printf("%d; %d; %d;", %a, %b, %c);
去掉引號外的%。
「我要怎麼用正規表示式來表示「引號外部」的概念呢?」,這個朋友被困住了。
但是,我們仔細觀察就會發現,其實我們真正關注的不是「引號外部」,而是引號字串(也就是表示格式的字串)之後的內容,也就是說,最後乙個引號右邊的內容,仔細觀察就會發現,其中文字的特點是,它們的右邊都沒有引號,於是問題就變成了,「去掉這樣的百分號,它右邊的字串中不包含引號」。
於是我們很順利地寫出正規表示式
%(?=[^"]*$)
這裡,一定不要忘記新增$,這樣,括號內的結構才能匹配右邊的所有字元,而不是其中的一串字元。
常用的表示式收集於此,以備不時之需。
匹配中文字元的正規表示式: [/u4e00-/u9fa5]
評注:匹配中文還真是個頭疼的事,有了這個表示式就好辦了
匹配雙位元組字元(包括漢字在內):[^/x00-/xff]
評注:可以用來計算字串的長度(乙個雙位元組字元長度計2,ascii字元計1)
匹配空白行的正規表示式:/n/s*/r
評注:可以用來刪除空白行
匹配html標記的正規表示式:<(/s*?)[^>]*>.*?|<.*? />
評注:網上流傳的版本太糟糕,上面這個也僅僅能匹配部分,對於複雜的巢狀標記依舊無能為力
匹配首尾空白字元的正規表示式:^/s*|/s*$
評注:可以用來刪除行首行尾的空白字元(包括空格、製表符、換頁符等等),非常有用的表示式
匹配帳號是否合法(字母開頭,允許5-16位元組,允許字母數字下劃線):^[a-za-z][a-za-z0-9_]$
評注:表單驗證時很實用
匹配國內**號碼:/d-/d|/d-/d
評注:匹配形式如 0511-4405222 或 021-87888822
匹配身份證:/d|/d
評注:中國的身份證為15位或18位
匹配特定數字:
^[1-9]/d*$ //匹配正整數
^-[1-9]/d*$ //匹配負整數
^-?[1-9]/d*$ //匹配整數
^[1-9]/d*|0$ //匹配非負整數(正整數 + 0)
^-[1-9]/d*|0$ //匹配非正整數(負整數 + 0)
^[1-9]/d*/./d*|0/./d*[1-9]/d*$ //匹配正浮點數
^-([1-9]/d*/./d*|0/./d*[1-9]/d*)$ //匹配負浮點數
^-?([1-9]/d*/./d*|0/./d*[1-9]/d*|0?/.0+|0)$ //匹配浮點數
^[1-9]/d*/./d*|0/./d*[1-9]/d*|0?/.0+|0$ //匹配非負浮點數(正浮點數 + 0)
^(-([1-9]/d*/./d*|0/./d*[1-9]/d*))|0?/.0+|0$ //匹配非正浮點數(負浮點數 + 0)
評注:處理大量資料時有用,具體應用時注意修正
匹配特定字串:
^[a-za-z]+$ //匹配由26個英文本母組成的字串
^[a-z]+$ //匹配由26個英文本母的大寫組成的字串
^[a-z]+$ //匹配由26個英文本母的小寫組成的字串
^[a-za-z0-9]+$ //匹配由數字和26個英文本母組成的字串
^/w+$ //匹配由數字、26個英文本母或者下劃線組成的字串
評注:最基本也是最常用的一些表示式
風火程式設計 正規表示式應用
import re s 12hjk pattern re.compile r pattern.match s ret1 r.group print ret1 def make time self,ot 把時間轉成標準格式字串 param time 解析出來的時間格式 2019 09 29 上午 中午...
shell程式設計 正規表示式的應用
1 匹配單個字元 單個一般字元 str grep a demo.txt 轉義後的字元 如果想要匹配這些元字元本身,則需要在這些字元的前面加上轉義字元 只保留其字面意義,如 匹配圓點 反斜線 也是乙個元字元,如果想要匹配反斜線,也需要在其前面加上轉義字元,即表示式 表示匹配乙個反斜線 儘管在通常情況下...
正規表示式應用
d 非負整數 正整數 0 0 9 1 9 0 9 正整數 d 0 非正整數 負整數 0 0 9 1 9 0 9 負整數 d 整數 d 非負浮點數 正浮點數 0 0 9 0 9 1 9 0 9 0 9 1 9 0 9 0 9 0 9 1 9 0 9 正浮點數 d 非正浮點數 負浮點數 0 0 9 0 ...