正規表示式在程式設計中的應用

2021-04-20 03:41:36 字數 2205 閱讀 6526

正規表示式應用起來的確得心應手。譬如,驗證乙個字串是否數字字串,/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 ...