【前言】在写爬虫时,正则表达式有时候比较难写,一个是自己不熟练,二者数据分析提取数据千奇百怪。

 一、好在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、最终可以实现百分之九十准确率。当然离不开深度学习算法对数字识别率高。

Python 过滤字母和数字的更多相关文章

  1. python取字母以及数字随机数

    一.这里用到了:String模块ascii_letters和digits ''.join(random.sample(string.ascii_letters + string.digits, 9)) ...

  2. Java正则表达式过滤出字母、数字和中文

    原文:http://blog.csdn.net/k21325/article/details/54090066 1.Java中过滤出字母.数字和中文的正则表达式 (1)过滤出字母的正则表达式 [^(A ...

  3. Java中过滤出字母、数字和中文的正则表达式

    1.Java中过滤出字母.数字和中文的正则表达式 (1)过滤出字母的正则表达式 [^(A-Za-z)] (2)过滤出数字的正则表达式 [^(0-9)] (3)过滤出中文的正则表达式 [^(\\u4e0 ...

  4. C# 过滤特殊字符,保留中文,字母,数字,和-

    #region public static string FilterChar(string inputValue) 过滤特殊字符,保留中文,字母,数字,和- /// <summary> ...

  5. Python判断字符串是否为字母或者数字

    严格解析:有除了数字或者字母外的符号(空格,分号,etc.)都会Falseisalnum()必须是数字和字母的混合isalpha()不区分大小写 str_1 = "123" str ...

  6. Python 使用正则表达式验证密码必须包含大小写字母和数字

    校验密码是否合法的程序. 输入一个密码 1.长度5-10位 2.密码里面必须包含,大写字母.小写字母和数字 3.最多输入5次 ===================================== ...

  7. AJPFX总结关于Java中过滤出字母、数字和中文的正则表达式

    1.Java中过滤出字母.数字和中文的正则表达式 (1)过滤出字母的正则表达式      [^(A-Za-z)] (2) 过滤出 数字 的正则表达式   [^(0-9)] (3) 过滤出 中文 的正则 ...

  8. python如何判断字符串是否以某个字母或者数字结尾

    1.如果是对某个确定的字符或者数字进行判断,可以直接使用endswith()方法 # 判断str_a是否以‘A’结尾 str_a = '20190813A' print(str_a.endswith( ...

  9. 【奇技淫巧】过滤了字母和数字,如何写 shell

    日期:2018-08-13 11:56:26 作者:Bay0net 介绍:金融行业正式比赛的一个题目 0x01.题目信息 文中给了一个代码 <?php include 'flag.php'; i ...

随机推荐

  1. shell脚本将字符串按指定分隔符切分成数组

    Shell 数组用括号来表示,元素用"空格"符号分割开,语法格式如下: array_name=(value1 value2 ... valuen) keyword=1,sdg,dd ...

  2. Centos根目录100%解决思路

    Centos 7 根目录(爆满)100%解决思路,下面以宝塔面板环境为例 1.首先远程到服务器,在~下输入df -h ,看下根目录下文件夹使用情况 [root@localhost~]# df -h F ...

  3. k8s~kubectl常用命令

    查看所有 pod 列表, -n 后跟 namespace, 查看指定的命名空间 kubectl get pod kubectl get pod -n kube kubectl get pod -o w ...

  4. 2019牛客暑期多校训练营(第八场)B-Beauty Values(期望线性性)

    >传送门< 题意:思路:期望的线性性(可加性),比赛的时候写的代码超级无敌长,不过值得欣慰的是一发AC了,官方的题解写的还不错~ 我们可以把每种数字对答案的贡献分开来计算,即枚举每个数字, ...

  5. Luogu T9376 区间GCD

    题目背景 无 题目描述 给定一长度为n的动态序列,请编写一种数据结构,要求支持m次操作,包括查询序列中一闭区间中所有数的GCD,与对一闭区间中所有数加上或减去一个值. 输入输出格式 输入格式: 第1行 ...

  6. [IOI1998] Polygon (区间dp,和石子合并很相似)

    题意: 给你一个多边形(可以看作n个顶点,n-1条边的图),每一条边上有一个符号(+号或者*号),这个多边形有n个顶点,每一个顶点有一个值 最初你可以把一条边删除掉,这个时候这就是一个n个顶点,n-2 ...

  7. 2020ICPC&#183;小米 网络选拔赛第一场 J.Matrix Subtraction (贪心,二维差分)

    题意:给一个\(nXm\)的矩阵,可以选取\(aXb\)的子矩阵,使子矩阵中的所有元素减一,问最后是否能使矩阵中所有元素变为\(0\). 题解:首先贪心,我们看最左上角的元素,如果\(g[1][1]\ ...

  8. windows安装

    1.windows系统版本分类a. 个人版windows98.XP.win7,win8,win10b. 企业版/服务器版windows server NT/2000/2003/2008/2012[广泛 ...

  9. Kubernetes安装EFK教程(非存储持久化方式部署)

    1.简介 这里所指的EFK是指:ElasticSearch,Fluentd,Kibana ElasticSearch Elasticsearch是一个基于Apache Lucene的开源搜索和数据分析 ...

  10. servlet相关知识点

    一.servlet的生命周期 Servlet(Sever Applet),全称是Java Servlet,是用java编写的服务器程序.Servlet是指任何实现了这个Servlet接口的类. ser ...