1. 圖解正則表達式,這一篇就夠了

        共 2465字,需瀏覽 5分鐘

         ·

        2021-03-20 09:28

        選自janmeppe.com,作者:Jan Meppe

        機器之心編譯



        一個好的正則表達式看起來像魔法,但請記?。?/span>任何足夠先進的技術都無法與魔法區(qū)分開來。


        所以,就讓我們揭開正則表達式的神秘面紗!


        如果你理解正則表達式,它會突然變成一個超快速和強大的工具……但你首先需要理解它,老實說,我覺得新手可能會對它望而生畏!


        讓我們從基礎開始。正則表達式(regex)是什么?它們的用途是什么?


        Regex 新手上路


        本質(zhì)上來看,正則表達式是定義一種搜索模式的字符序列。


        正則表達式通常用于 grep 等工具中,以在較長文本字符串中查找模式。


        考慮以下一個 cat.txt 文件:


        catcat2dog


        如果我們使用正則表達式 cat 來搜索匹配項,我們會找到以下匹配項:


        catcat2


        高級用戶需要注意的是,本文存在一個技術上的錯誤,即正則表達式和使用正則表達式的工具(如 grep)混為了一談。


        正則表達式適用于字符,而不是單詞


        需要反復強調(diào)的一個重要問題是:正則表達式適用于字符,而不是單詞。隱含串聯(lián)。



        如果我們使用正則表達式搜索模式 cat,則不會查找單詞「cat」,而會查找字符 c、a 和 t。


        點和星號


        最基本的字符是單個字符,如 a、b、c 等。現(xiàn)在讓我們介紹以下兩種特殊的字符。



        .(點)字符可以匹配*任何單個字符*。例如,如果我們搜索 c.t,則將匹配從 cat 到 c0t 或 cAt 的任何內(nèi)容,并將匹配任何單個字符 c +任何字符+單個字符 t。


        *(星號)字符有點困難。它修改它前面的字符,然后匹配該字符的*零個或多個字符*。的確如此。例如,cat*可以匹配 cat、catt、cattttt 以及 ca。


        示例分析:The cat ate my homework


        假設我們逐行讀取一個文件,則第一行如下所示:


        The cat ate my homework.


        讓我們看看如何匹配該行中的模式 cat。



        我們首先將該模式的首字符與句子中的首字符匹配。


        如果找不到匹配項,則跳轉(zhuǎn)至該行中的下一個字符,然后再從模式的首字符開始。


        如果我們找到一個匹配項,則將跳轉(zhuǎn)至模式和該行中的下一個字符,然后重復這個過程。當我們找到整個模式的匹配時,返回找到匹配項的行。


        這就是正則表達式最基本、最常用的功能,即在較大的字符串中查找較小的搜索模式。


        講到這里,我想大家已經(jīng)大致了解了什么是正則表達式以及它的兩個特殊字符: .(點)和 *(星號)。接下來,我會為大家介紹更多其他內(nèi)容。


        正則表達式三叉戟


        正則表達式的各個部分可以由三個不同的組件組成:


        1. 錨點

        2. 字符集

        3. 修飾符


        這三部分構成了正則表達式的三叉戟!



        讓我們從三叉戟的第一個部分開始:錨點!



        錨點


        錨點指定個各行的模式位置。下面是兩個最重要的錨點:


        • ^(插入符號)將模式固定到行首。例如,模式^1 匹配以 1 開頭的任意行。

        • $(美元符)將模式固定到句尾。例如,9$匹配以 9 結尾的任意行。


        注意,在以上兩種情況下,錨點必須分別位于模式的開頭和結尾。^1 匹配行首的 1,但 1^匹配后跟^的 1。類似地,1$匹配以 1 結尾的行,但$1 匹配一個該行任意位置后跟 1 的美元符號。


        字符集


        三叉戟的第二部分:字符集。字符集是正則表達式的基礎。單個字符,比如 a,是最基本的字符集(一組元素)。但是 [0-9] 等正則表達式可以匹配任何一個數(shù)字,或者如果你能回想到 *的含義,則可以制作模式 [0-9][0-9](這個模式匹配的內(nèi)容留給讀者作為練習)。


        其他一些重要的字符集:


        • [0-9] 匹配 0…9 中的任何一個數(shù)字

        • [a-z] 匹配任何小寫字母

        • [A-Z] 匹配任何大寫字母


        我們還可以對多個字符集進行組合:


        • [A-ZA-Z0-9] 匹配任何大小寫字母和單個數(shù)字。


        修飾符


        此部分內(nèi)容沒有深入展開,以前面遇到的一個修飾符 *(星號)為例。修飾符改變它前面字符的含義。還有很多其他的修飾符,但以* 為例進行討論是一個很好的開始。


        如下所示:讓我們快速將文本轉(zhuǎn)儲到文件中。


        $ echo "The cat jumps long time \nThen we also have the fact that these are words.\n1234 this is a test post please ignore." >> grep.txt


        這是現(xiàn)在文件中的內(nèi)容。


        $ cat grep.txtThe cat jumps long timeThen we also have the fact that these are words.1234 this is a test post please ignore.


        尋找 cat。


        $ grep "cat" grep.txtThe cat jumps long time


        尋找任何以數(shù)字^[0-9] 開始的任意行。


        $ grep "^[0-9]" grep.txt1234 this is a test post please ignore.


        就是這樣!你剛剛使用了正則表達式。太棒了。


        總結


        回顧一下這篇博客的內(nèi)容:


        • 正則表達式的基本功能;

        • 正則表達式的三個主要組件:錨點、字符集和修飾符。

        •  .(點)、*(星號)、^(插入符)和$(美元符號)。

        • 一些字符集 [0-9]、[a-z]、[A-Z] 和它們的組合。


        這篇博客的目的是通過帶插圖的介紹使用戶更輕松地了解正則表達式。


        如果能夠克服技術上的困難,則最終可以掌握這種相對簡單但功能卻很強大的正則表達式工具,從而為任何數(shù)據(jù)科學家?guī)韺氋F的價值。


        原文地址:https://www.janmeppe.com/blog/regex-for-noobs/


        瀏覽 59
        點贊
        評論
        收藏
        分享

        手機掃一掃分享

        分享
        舉報
        評論
        圖片
        表情
        推薦
        點贊
        評論
        收藏
        分享

        手機掃一掃分享

        分享
        舉報
          
          

            1. 亚洲天堂视频在线观看 | 美女视频黄特级大片 | 美女视频黄a视频免费全程软件 | 一级高清片 | 欧美成人精品三级又大又粗 |