Python 過濾字母和數字


【前言】在寫爬蟲時,正則表達式有時候比較難寫,一個是自己不熟練,二者數據分析提取數據千奇百怪。

 一、好在python有個re模塊,提供了很多更加簡便的方法;可參考此文檔:https://www.cnblogs.com/tina-python/p/5508402.html

 二、但有時候,不能實現過濾抽取的功能,python提供了filter函數。 可參考:  http://www.runoob.com/python/python-func-filter.html

具體的應用:

 1 crazystring = 'dade142.!0142f[., ]ad'
 2  
 3 # 只保留數字,使用內置方法str.isdigit
 4 new_crazy = filter(str.isdigit, crazystring)
 5 print(''.join(list(new_crazy)))
 6 # 只保留字母
 7 new_crazy = filter(str.isalpha, crazystring)
 8 print(''.join(list(new_crazy)))
 9  
10  
11 # 只保留字母和數字
12 new_crazy = filter(str.isalnum, crazystring)
13 print(''.join(list(new_crazy)))
14  
15 # 如果想保留數字0-9和小數點’.’ 則需要自定義函數
16 #下面使用lambda表達式,方便快捷 
17 new_crazy = filter(lambda ch: ch in '0123456789.', crazystring)
18 print(''.join(list(new_crazy)))

其中的str.isdigit是其內置方法。

我們也可以自己定義規則,不如只過濾出奇數:

#!/usr/bin/python
# -*- coding: UTF-8 -*-
 
def is_odd(n):
    return n % 2 == 1
 
newlist = filter(is_odd, [1, 2, 3, 4, 5, 6, 7, 8, 9, 10])
print(newlist)

定義函數時,可以使用lambda表達式,這樣會更加方便。

三、我的具體應用場景

  在寫爬蟲分析驗證碼時,用騰訊雲分析回的json文件,提取驗證碼時用到正則匹配。一直找python的正則表達式,不好找也不好寫。

1、對傳回的json數據,做一個正則提取:

r_index = r'itemstring":"(.*?)"'  

2、然兒,提取的二維碼總會有噪聲,(.*?)是將所有數據都提取出來了。但是,我們深度學習識別出來的二維碼有噪聲,會有‘\'、‘_’、或者空格。需要二次處理。目標是提取數字和字母,不含有任何空格和噪聲。使用"\W+",會有下划線。我們使用:

#接在上面的語句后面,進一步過濾
new_index = filter(str.isalnum, r_index)

3、最終可以實現百分之九十准確率。當然離不開深度學習算法對數字識別率高。


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM