基本原理是使用一系列特殊字元和語法來匹配和操作文字資料。正規表示式通常包括模式字串,用於描述要匹配的文字模式,以及一個或多個特殊字元和語法,用於控制匹配的方式和結果。 Python中的正規表示式通常使用re模組來實現

WBOY
發布: 2023-05-10 09:40:14
轉載
1292 人瀏覽過

    正規表示式是什麼?

    正規表示式,又稱規則表達式,(英文:Regular Expression,在程式碼中常簡稱為 regex、regexp 或 RE),它是電腦科學的一個概念。正規表示式通常被用來檢索、取代那些符合某個模式的文字。許多程式設計語言都支援利用正規表示式進行字串操作。例如在 Perl 中內建了一個功能強大的正規表示式引擎。正規表示式這個概念最初是由 Unix 中的工具軟體普及開的。正規表示式是對字串(包括普通字符(例如,a 到z 之間的字母)和特殊字符(稱為"元字符"))操作的一種邏輯公式,就是用事先定義好的一些特定字符、及這些特定字元的組合,組成一個"規則字串",這個"規則字串"用來表達對字串的一種過濾邏輯。正規表示式是一種文字模式,模式描述在搜尋文字時要匹配的一個或多個字串。

    1.實例引入

    說了一大堆廢話,大家可能還是雲裡霧裡的,我們透過實例來說明一下,我們可以用正規表示式測試工具,或者python都可以,首先,我們輸入一段文字。

    hello,my name is Tina,my phone number is 123456 and my web is http://tina.com.

                                   [a-zA-z]+://[^\s]*
    登入後複製

    我們可以取得網頁鏈接,也就是文本中的url,是不是很神奇呢?

    這是因為它有自己的符合規則,部分如下。

    #*0個或多個表達式
    模式描述
    #. 任意字元

    一個或多個表達式

    #  關於更多的符合規則可自行查閱。

    ?,*, ,\d,\w #都是等價字元

    ##?等價於匹配長度{0,1}

    *等價於符合長度{0,}

    等於匹配長度{1,}

    \d 等價於[0-9]

    #\D 等價於[^0-9]

    #\w 等價於[A-Za-z_0-9]

    #\W 等價於[^A-Za-z_0-9]

    2.match()

            這裡介紹一個常用的符合方法——match(),向他傳入要符合的字串以及正規表示式,就可以偵測這個正規表示式是否符合字串。

    匹配目標

    res = re.match('hello\s(\d+)sword')
    登入後複製

    貪婪匹配

    res = re.match('hello.*(\d+)sword')
    登入後複製

    3.findall()

    #我們最常用的就是這個,我們看看這個是如何使用的。 基本原理是使用一系列特殊字元和語法來匹配和操作文字資料。正規表示式通常包括模式字串,用於描述要匹配的文字模式,以及一個或多個特殊字元和語法,用於控制匹配的方式和結果。 Python中的正規表示式通常使用re模組來實現

    import re
     
    useData = str(input('请输入字符串数据:'))
     
    '''
    匹配字符串中的数字,+是匹配前面的子表达式一次或多次
    '''
    digital = re.findall('\d+',useData)
     
    print(digital)
    登入後複製

    我們看看運行結果

     findall()函數是傳回所有符合的字串,傳回值的資料類型為列表。

    常用符號

    我們再來來說說正規表示式的常用符號吧。

    “.”字元為符合任意單一字元。

    “\”字元為轉義字元。

    「[…]」為字元集。

    “(.*?)” 是python爬蟲最常用的字符,叫做貪心演算法,可以匹配任意的字符。

     下面我們來看一個範例程式碼。

    import re
     
    a=‘xxixxjshdxxlovexxsfhxxpythonxx'
     
    data=re.findall(‘xx(.*?)xx')
     
    print(data)
    登入後複製

    我們運行一下,看下效果。

    運行結果

    [‘I’ ,‘love’,‘python’]

    ##特殊字元

     所謂特殊字元,就是一些有特殊意義的字符,例如講runoo*b 中的,簡單的說就是表示任何字串的意思。如果要查找字串中的 * 符號,則需要對 * 進行轉義,即在其前面加一個 \,runo*ob 匹配字串 runo\*ob。  許多元字元要求在試圖匹配它們時特別對待。若要匹配這些特殊字符,必須先使字符"轉義",即,將反斜線字符\ 放在它們前面。下表列出了正規表示式中的特殊字元:特別字元##說明符合輸入字串的結尾位置。如果設定了 RegExp 物件的 Multiline 屬性,則 $ 也符合 ‘\n’ 或 ‘\r’。若要符合 $ 字元本身,請使用 $。 標記一個子運算式的開始和結束位置。子表達式可以取得以供以後使用。若要匹配這些字符,請使用 ( 和 )。 符合前面的子運算式是零次或多次。若要匹配 * 字符,請使用 *。 符合前面的子表達式一次或多次。若要匹配 字符,請使用 。 符合除換行符 \n 之外的任何單字元。若要符合 . ,請使用 . 。
    $

    ()
    *
    .
    ######

    概念说了一大堆,大家可能也记不住,我直接说几个案例,大家就能明白其他的道理。

    这是某网的HTML,部分片段如下:

    <span class=“price”>§<i>123</i></span>
     
    <span class=“price”>§<i>133</i></span>
     
    <span class=“price”>§<i>156</i></span>
     
    <span class=“price”>§<i>189</i></span>
    登入後複製

    大家会发现只有中间的一段不一样,而不一样的数据就是我们想要的,我们怎么用正则表达式提取出来呢.

    <span class=“price”>§<i>(.*?)</i></span>
    登入後複製

    就可以了,我们看看效果吧。

    123
    133
    156
    189

    以上是基本原理是使用一系列特殊字元和語法來匹配和操作文字資料。正規表示式通常包括模式字串,用於描述要匹配的文字模式,以及一個或多個特殊字元和語法,用於控制匹配的方式和結果。 Python中的正規表示式通常使用re模組來實現的詳細內容。更多資訊請關注PHP中文網其他相關文章!

    相關標籤:
    來源:yisu.com
    本網站聲明
    本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn
    熱門教學
    更多>
    最新下載
    更多>
    網站特效
    網站源碼
    網站素材
    前端模板