正則表達式教程:實例速查
本文為 AI 研習社編譯的技術博客,原標題 :
Regex tutorial?—?A quick cheatsheet by examples
翻譯 | kerr、狒狒 校對 | 就2 整理 | 就2
https://medium.com/factory-mind/regex-tutorial-a-simple-cheatsheet-by-examples-649dc1c3f285
正則表達式(regex 或 regexp)在文本信息提取方面是非常有用的工具,通過查詢一個或多個特定搜索模式的匹配實現(例如,特定的ASCII或unicode字元序列)。
正則表達式的應用領域包括字元串語義分析/替換,到數據格式轉換,以及網頁抓取等。
最有趣的一點是,只要學過正則表達式的語法,在目前幾乎所有編程語言中都可以應用正則表達式(JavaScript、Java、VB、C/C++、C#、Python、Perl、Ruby、Delphi、R、Tcl、以及其他很多語言),這些語言對一些高級功能和語法的支持只有細微的區別。
下面通過一些示例和解釋來了解正則表達式。
Basic topics
Anchors?—?^ and $
^The matches any string that starts with The -> Try it!end$ matches a string that ends with end
^The end$ exact string match (starts and ends with The end)
roar matches any string that has the text roar in it
數量詞 —* + ? and{}
或運算符——|或[]
字元類——d w s和.
謹慎使用「.」 運算符,因為通常類或反義字元類(我們將在下面介紹)會更快更精確。
d, w和 s也分別用 D, W和 S表示它們的否定。
例如, D將執行與 d獲得的相反匹配。
為了按字面意思理解,你必須使用反斜杠「」來轉義字元^.[$()|*+?{,因為它們具有特殊含義。
請注意,您還可以匹配不可列印的字元,如製表符 t,換行符 n,回車符 r。
標誌位
基礎部分中,如何構建一個正則表達式還有一個基本概念:標誌。
正則表達式通常以這種形式/abc /出現,其中搜索模式由兩個斜杠字元/分隔。
我們可以指定一個帶有這些值的標誌(我們也可以將它們相互組合):
g(全局)在第一次匹配後不返回,從上一次匹配結束時重新開始後續搜索
m(多行)啟用時,^和$將匹配這行的開頭和結尾,而不是整個字元串。
i(不敏感)使整個表達式不區分大小寫(例如/ aBc / i將匹配AbC)。
中心主題
分組和捕獲——()
當我們需要使用您首選的編程語言從字元串或數據中提取信息時,此運算符非常有用。由幾個組捕獲的任何多次出現都將以經典數組的形式公開:我們將使用匹配結果的索引來訪問它們的值。
如果我們選擇為組添加名稱(使用(?...)),我們將能夠使用匹配結果檢索組值,就像字典一樣,其中鍵將是每個組的名稱。
括弧表達式——[]
請記住,在括弧內的表達式中,所有特殊字元(包括反斜杠)都會失去其特殊權力:因此我們不會應用「轉義規則」。
貪婪與惰性匹配
量詞(* + {} )是貪婪的運算符,因此它們通過提供的文本儘可能地擴展匹配。
例如,匹配This is a
simple div
test中的
simple div
。
為了只捕獲div標籤,我們可以使用? 讓它變得懶惰:
請注意,更好的解決方案應該避免使用.來支持更嚴格的正則表達式:
高級主題
邊界—? and B
表示像插入符號(它類似於$和^)的匹配位置,其中一側是單詞字元(如w)而另一側不是單詞字元(例如,它可能是字元串的開頭或者空格字元)。
它伴隨著它的否定,B。這匹配不匹配的所有位置,如果我們想要找到完全被單詞字元包圍的搜索模式,則可以匹配。
回溯引用——1
先行和後行斷言——(?=)和(?
你也可以使用否定運算符!
總結
正如您所看到的,正則表達式的應用程序欄位可以是多個的,我確信您在開發人員職業生涯中看到的任務中至少識別出這些任務中的一個,這裡是一個快速列表:
數據驗證(例如檢查時間字元串是否格式正確)
數據抓取(特別是網頁抓取,最終按特定順序查找包含特定單詞集的所有頁面)
數據轉換(將數據從「原始」轉換為另一種格式)
字元串解析(例如捕獲所有URL的GET參數,捕獲一組括弧內的文本)
字元串替換(即使在使用通用IDE的代碼會話期間,例如在相應的JSON對象中轉換Java或C#類 - 將「;」替換為「,」將其設為小寫,避免類型聲明等)
語法高亮,文件重命名,數據包嗅探和許多其他涉及字元串的應用程序(其中數據不必是文本)
如果你喜歡的話,不要忘了推薦這篇文章。
不久我將出版一份包含常見正則表達式列表的新文章,敬請關注!
※限時免費·機器學習大禮包
※告別選擇困難症,我來帶你剖析這些深度學習框架基本原理
TAG:AI研習社 |