python中掉过又爬出来的那些坑
一、中文是不是“字母”?
当然,看到标题你肯定想这答案是显而易见的,但是、but、问题就在这里,我也是这么想的!!!然后就被python打脸了
看下面的例子:
s = '你说我是字母吗'
print(s.isalpha())
你以为他是False?不,答案是:
这个问题真是困扰了我一晚上,自己一开始使用正则去匹配的,匹配了半天发现我正则虽然只是略知皮毛,但是,这么简单的东西不会错啊,“\w”怎么就能匹配中文呢?如下:
import re
pattern = re.compile('^\w+$')
print(pattern.match(s))
看看结果:
他还从头到尾都是匹配的,我真的是试了一晚上,感觉被整个世界欺骗了。
终于,我认清了不是我自己的问题,放弃了继续在正则上下功夫,放弃了与编译软件作对,百度了一下。。。
isalpha函数是针对python2.7默认字符编码下的字符串设计的,所以不适用于unicode编码,在unicode编码下会出错。(言外之意python2是可以直接判断的)
对于unicode str,str.isalpha()会根据字符串中的字符是否属于Unicode编码的LETTER区域来判断是否都由字母组成。所以得出的结果为True,不一定只有26个字母哦。
而正则判断出错是因为在python3 中re默认支持的是unicode字符集,当然也支持汉字。
所以说,如果想用isalpha()来判断字符串是否都是字母,要对str做编码转换,即:
s = '你说我是字母吗'
print(s.encode('utf-8').isalpha())
当然,我们更需要用正则来判断,用正则可以用两种方法:
1、加入re.A就可以解决这样问题
import re
pattern = re.compile('^\w+$', re.A)
print(pattern.match(s))
2、用[a-zA-Z]代替\w
import re
pattern = re.compile(r'^[a-zA-Z]+$', re.A)
print(pattern.match(s))
python中掉过又爬出来的那些坑的更多相关文章
- python中正则表达式在中文字符串匹配时的坑
之前一直有使用python 正则表达式来做中文字符串或者中英文数字混合的字符串的匹配,发现有不少情况下会匹配失灵或者结果混乱,并且在不同操作系统上匹配结果也不一致,查了很久都不知道是什么原因.今天终于 ...
- 关于Python中正则使用findall和分组的一个坑
版权声明:本文为sam的原创文章,转载请添加出处:http://blog.csdn.net/samed https://blog.csdn.net/samed/article/details/5055 ...
- python中使用tabula爬取pdf数据并导出表格
Tabula是专门用来提取PDF表格数据的,同时支持PDF导出CSV.Excel格式. 首先安装tabula-py: tabula-py依赖库包括Java.pandas.numpy所以需要保证运行环境 ...
- 【python爬虫和正则表达式】爬取表格中的的二级链接
开始进公司实习的一个任务是整理一个网页页面上二级链接的内容整理到EXCEL中,这项工作把我头都搞大了,整理了好几天,实习生就是端茶送水的.前段时间学了爬虫,于是我想能不能用python写一个爬虫一个个 ...
- 在Python中使用BeautifulSoup进行网页爬取
目录 什么是网页抓取? 为什么我们要从互联网上抓取数据? 网站采集合法吗? HTTP请求/响应模型 创建网络爬虫 步骤1:浏览并检查网站/网页 步骤2:创建用户代理 步骤3:导入请求库 检查状态码 步 ...
- 关于python中PIL的安装
python 的PIL安装是一件很蛋痛的事, 如果你要在python 中使用图型程序那怕只是将个图片从二进制流中存盘(例如使用Scrapy 爬网存图),那么都会使用到 PIL 这库,而这个库是出名的难 ...
- 正则表达式与Python中re模块的使用
正则表达式与Python中re模块的使用 最近做了点爬虫,正则表达式使用的非常多,用Python做的话会用到re模块. 本文总结一下正则表达式与re模块的基础与使用. 另外,给大家介绍一个在线测试正则 ...
- 协程及Python中的协程
1 协程 1.1协程的概念 协程,又称微线程,纤程.英文名Coroutine.一句话说明什么是线程:协程是一种用户态的轻量级线程.(其实并没有说明白~) 我觉得单说协程,比较抽象,如果对线程有一定了解 ...
- python模块 re模块与python中运用正则表达式的特点 模块知识详解
1.re模块和基础方法 2.在python中使用正则表达式的特点和问题 3.使用正则表达式的技巧 4.简单爬虫例子 一.re模块 模块引入; import re 相关知识: 1.查找: (1)find ...
随机推荐
- [GO]二进制文件的拷贝
writestring的方式只适用于字符串的写入,对于十进制文件的写入只要使用write就可以了 package main import ( "os" "fmt" ...
- 设计模式14:Command 命令模式(行为型模式)
Command 命令模式(行为型模式) 耦合与变化 耦合是软件不能抵御变化的根本性原因.不仅实体对象与实体对象之间存在耦合关系,实体对象与行为操作之间也存在耦合关系. 动机(Motivation) 在 ...
- 编写高质量代码改善C#程序的157个建议——建议131:用PascalCasing命名公开元素
建议131:用PascalCasing命名公开元素 开放给调用者的属性.字段和方法都应该采用PascalCasing命名方法,比如: class Person { public string Firs ...
- Python 抓取html所有特定元素的方法
直接上代码哦,够直接了吧~ from lxml import etree #import mechanize import lxml.html #import cookielib #br = mech ...
- Mac开发者常用的工具
http://www.oschina.net/news/53946/mac-dev-tools
- 团体程序设计天梯赛L1-027 出租 2017-03-23 23:16 40人阅读 评论(0) 收藏
L1-027. 出租 时间限制 400 ms 内存限制 65536 kB 代码长度限制 8000 B 判题程序 Standard 作者 陈越 下面是新浪微博上曾经很火的一张图: 一时间网上一片求救声, ...
- CodeForces 834D The Bakery(线段树优化DP)
Some time ago Slastyona the Sweetmaid decided to open her own bakery! She bought required ingredient ...
- Hibernate Validator bean-validator-3.0-JBoss-4.0.2
信息: Hibernate Validator bean-validator-3.0-JBoss-4.0.2 后面是一大段错误信息不贴出来了... 解决方案:hibernate配置文件中加入 < ...
- 解决Struts2拦截器的对于参数传递无效问题
今天做项目时,使用拦截器对用户权限检查.拦截器本身没有问题,可是实现权限拦截,但是传递的参数全部都无效了.搞了很久,由于对拦截器的内部机制不是特别熟悉,所以重新研读了一下Struts2的拦截器.找到了 ...
- [HAOI2010]计数(组合数学)(数位DP)
原题题意也就是给的数的全排列小于原数的个数. 我们可以很容易的想到重复元素的排列个数的公式. 但是我们发现阶乘的话很快就会爆long long啊(如果您想写高精请便) 之后我就尝试质因数分解....但 ...