中文字幕av专区_日韩电影在线播放_精品国产精品久久一区免费式_av在线免费观看网站

溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點擊 登錄注冊 即表示同意《億速云用戶服務條款》

python怎么用正則表達式提取字符串

發布時間:2023-03-02 15:47:42 來源:億速云 閱讀:214 作者:iii 欄目:開發技術

今天小編給大家分享一下python怎么用正則表達式提取字符串的相關知識點,內容詳細,邏輯清晰,相信大部分人都還太了解這方面的知識,所以分享這篇文章給大家參考一下,希望大家閱讀完這篇文章后有所收獲,下面我們一起來了解一下吧。

    用正則表達式提取字符串

    在日常工作中經常遇見在文本中提取特定位置字符串的需求。

    python的正則性能好,很適合做這類字符串的提取,正則表達式的提取一般分兩種情況,一種是提取在文本中提取單個位置的字符串,另一種是提取連續多個位置的字符串。

    日志分析會遇到這種情況。

    1. 單個位置的字符串提取

    這種情況我們可以使用(.+?)這個正則表達式來提取. 舉例,一個字符串"a123b",如果我們想提取ab之間的值123,可以使用findall配合正則表達式,這樣會返回一個包含所以符合情況的list,代碼如下:

    import re
    str = "a123b"
    print(re.findall(r"a(.+?)b",str))
    #輸出['123']

    1.1貪婪和非貪婪匹配

    如果我們有一個字符串”a123b456b”,如果我們想匹配a和最后一個b之間的所有值而非a和第一個出現的b之間的值,可以用?來控制正則貪婪和非貪婪匹配的情況. 代碼如下:

    import re
    str = "a123b456b"
     
    print(re.findall(r"a(.+?)b", str))
    #輸出['123']
    #?控制只匹配0或1個,所以只會輸出和最近的b之間的匹配情況
     
    print(re.findall(r"a(.+)b", str))
    #輸出['123b456']
     
    print(re.findall(r"a(.*)b", str))
    #輸出['123b456']

    1.2多行匹配

    如果你要多行匹配,那么需要加上re.S和re.M標志. 加上re.S后, .將會匹配換行符,默認.不會匹配換行符. 代碼如下:

    str = "a23b\na34b"
     
    re.findall(r"a(\d+)b.+a(\d+)b", str)
    #輸出[]
    #因為不能處理str中間有\n換行的情況
     
    re.findall(r"a(\d+)b.+a(\d+)b", str, re.S)
    #s輸出[('23', '34')]

    加上re.M后,^$標志將會匹配每一行,默認^和$只會匹配第一行.

    代碼如下:

    str = "a23b\na34b"
     
    re.findall(r"^a(\d+)b", str)
    #輸出['23']
     
    re.findall(r"^a(\d+)b", str, re.M)
    #輸出['23', '34']

    2. 連續多個位置的字符串提取

    這種情況我們可以使用(?P<name>&hellip;)這個正則表達式來提取.

    舉例:

    如果我們有一行webserver的access日志:'192.168.0.1 25/Oct/2012:14:46:34 "GET /api HTTP/1.1" 200 44 "http://abc.com/search" "Mozilla/5.0"',我們想提取這行日志里面所有的內容,可以寫多個(?P<name>expr)來提取,其中name可以更改為你為該位置字符串命名的變量,expr改成提取位置的正則即可.

    代碼如下:

    import re
    line ='192.168.0.1 25/Oct/2012:14:46:34 "GET /api HTTP/1.1" 200 44 "http://abc.com/search" 
    "Mozilla/5.0"'
    reg = re.compile('^(?P<remote_ip>[^ ]*) (?P<date>[^ ]*) "(?P<request>[^"]*)" 
    (?P<status>[^ ]*) (?P<size>[^ ]*) "(?P<referrer>[^"]*)" "(?P<user_agent>[^"]*)"')
    regMatch = reg.match(line)
    linebits = regMatch.groupdict()
    print(linebits)
    for k, v in linebits.items() :
        print(k+": "+v)

    輸出的結果為:

    status: 200
    referrer:  
    request: GET /api HTTP/1.1
    user_agent: Mozilla/5.0
    date: 25/Oct/2012:14:46:34size: 44
    remote_ip: 192.168.0.1

    用正則表達式提取字符串中的整數

    直接上代碼吧~

    import re
    re.findall("\d+","asd1234")

    以上就是“python怎么用正則表達式提取字符串”這篇文章的所有內容,感謝各位的閱讀!相信大家閱讀完這篇文章都有很大的收獲,小編每天都會為大家更新不同的知識,如果還想學習更多的知識,請關注億速云行業資訊頻道。

    向AI問一下細節

    免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。

    AI

    腾冲县| 招远市| 滦南县| 南昌县| 定日县| 牟定县| 宁海县| 鹤壁市| 浮梁县| 怀来县| 都江堰市| 东辽县| 盐源县| 东乌珠穆沁旗| 香河县| 格尔木市| 桃源县| 保定市| 郧西县| 札达县| 扎鲁特旗| 湛江市| 名山县| 彝良县| 安龙县| 金秀| 太保市| 麻阳| 手游| 唐山市| 体育| 香港| 东城区| 渭源县| 民乐县| 民勤县| 郑州市| 宁城县| 林芝县| 兴和县| 江油市|