正規表示式

2021-09-24 21:20:52 字數 1575 閱讀 8119

形式語言與自動機

*: 表示將前面模式匹配0次或者多次

+:表示將前面模式匹配0次或者多次

?:表示將前面模式匹配0次或者1次

: 表示將前面模式匹配m次到n次

. :萬用字元

: 匹配字元組中的任意乙個字元

[^] : 匹配補字元組中的任意乙個字元

():子組 子表示式,可以對其使用各種操作符

|:兩組模式中選乙個 or操作符

\d : 匹配所有數字

\w: 匹配所有數字、字母

\s: 匹配所有空白符

「([0-9]*).([0-9]*).([0-9]*).([0-9]*)」

這樣匹配了之後還需要檢查

例2:把類似於下面這樣的東西提取出他的資訊

這是windows cmd中的一些個檔案記錄,如果是檔案,那麼中間表示其大小,如果是資料夾,則表示,前面是

2019/05/04 15:22 329,909,920 clion-2019.1.2.exe

2019/03/25 22:30 cloudmusic

利用下面表示式即可

([0-9]/[0-9]/[0-9])[ ]*([0-9]:[0-9])[ ]*(|[0-9](,[0-9])*)[ ]*(.*)",

例3:統計化學式子中的所有原子個數

例如:(ch3)2chcooh:

要求程式輸出結果為: c4h8o2

如何解決這個問題?

首先可以獲得乙個book,記錄所有的原子

這個正規表示式可以完成任務

「[a-z][a-z]|[a-z]」

這個用來分割,就是把括號的部分摘出來

((\w+))([0-9]*)

現在變成若干小段,每一段都不含括號,之後用乙個

「([a-z][a-z]|[a-z])([0-9])*」

即可完成任務

re包中實現了函式:

函式名函式作用

match(pattern, string):

返回從頭開始第一次匹配,通過返回值的group方法得到具體的串:

search(pattern, string):

返回第一次匹配,通過返回值的group方法得到具體的串:

findall(pattern,string):

返回乙個匹配列表

通過這些方法,就可以完成匹配工作了

函式名函式作用

split(pattern, string):

把所有匹配的地方做分割

sub(pattern, string):

把所有匹配的地方做替換

例5:按空格分割,允許多個空格

re.split("[\s]*",「223 3213 3 123」)

這比split方法高階一些,可以實現隨意的分割

例6:給出一篇英文文字,統計詞頻

word_list = re.findall("([a-za-z]+)(』([ts]|re))?","".join(open(「d:/1.txt」).readlines()))

print(word_list)

正規表示式 正規表示式 總結

非負整數 d 正整數 0 9 1 9 0 9 非正整數 d 0 負整數 0 9 1 9 0 9 整數 d 非負浮點數 d d 正浮點數 0 9 0 9 1 9 0 9 0 9 1 9 0 9 0 9 0 9 1 9 0 9 非正浮點數 d d 0 0 負浮點數 正浮點數正則式 英文本串 a za z...

正規表示式 表示式

網域名稱 a za z0 9 a za z0 9 a za z0 9 a za z0 9 interneturl a za z s 或 http w w w 手機號碼 13 0 9 14 5 7 15 0 1 2 3 5 6 7 8 9 18 0 1 2 3 5 6 7 8 9 d 號碼 x x x...

Linux正規表示式 編寫正規表示式

為了所有實用化的用途,你可以通過使用程式產生正確的結果。然而,並不意味著程式總是如你所願的那樣正確地工作。多數情況下,如果程式不能產生想要的輸出,可以斷定真正的問題 排除輸入或語法錯誤 在於如何描述想要的東西。換句話說,應該考慮糾正問題的地方是描述想要的結果的表示式。表示式不完整或者公式表示得不正確...