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 ...
随机推荐
- IO编程之writelines方法
1.使用with open as 函数写入文件 2.创建后的文件名为database.txt 3.创建一个函数进行读取文件,使用for循环遍历整个文件内容 4.使用if __name__=='__ma ...
- Python基于VS2013 开发环境搭建 Hello World 10分钟搞定
1.先下载Python 安装 Next ->安装完成 2.以前安装过VS2013 打开VS2013 文件->新建项目 (此时如果没有Python Application,请点击里面的安装插 ...
- MATLAB搬移到别的电脑出现License Manager Error -9
是注册码的问题,不需要重装,主要是以前的安装包不见了.解决办法: 下一个KeyGen的MLMCrypt.exe文件.运行之后在当前目录下出现一个LICENSE.DAT文件. 复制到matlab.exe ...
- vsftpd安装与配置--研究tcp与防火墙
vsftpd的配置文件 /etc/vsftpd/vsftpd.conf 主配置文件 /usr/sbin/vsftpd Vsftpd的主程序 /etc/rc.d/init.d/vsftpd 启动脚本 / ...
- 【Newtonsoft.Json.dll】操作简单JSON数据
{ //json数据 string json = "{\"name\":\"张三\",\"sex\":\"男\" ...
- 提高SQL Server数据库效率常用方法
1.没有索引或者没有用到索引(这是查询慢最常见的问题,是程序设计的缺陷) 2.I/O吞吐量小,形成了瓶颈效应. 3.没有创建计算列导致查询不优化. 4.内存不足 5.网络速度慢 6.查询出的数据量过大 ...
- centos7 minimal 安装 &网络配置
1.下载centos7manimal.iso 下载地址: http://isoredirect.centos.org/centos/7/isos/x86_64/CentOS-7-x86_64-Min ...
- Sql2012 AlwaysOn
准备: 两台宿主机,两台虚拟机,一根交叉线 系统都是windows server 2012 步骤 1.两台虚拟机均为双网卡 2.配置故障转移群集 3.执行AlwaysOn配置(增加Listen此步骤上 ...
- eclipse 中文或法文等语言注释错误解决办法 Some characters cannot be mapped using "GBK" character encoding
这个问题会造成 无法修改包名.解决办法: Window->Preferences->Content Types->Text->Java Source File Default ...
- 【06】循序渐进学 docker:跨主机通信
写在前面的话 目前解决容器跨主机通信的方案有很多种,这里给出的只是其中的一种,而且还不是最好的方案,不过归根结底,大同小异.在学习 docker swarm 之前,大家可以先看看这种. 啥是 over ...