返回顶部
首页 > 资讯 > 后端开发 > Python >同样是Python,Python3和P
  • 732
分享到

同样是Python,Python3和P

Python 2023-01-31 08:01:08 732人浏览 泡泡鱼

Python 官方文档:入门教程 => 点击学习

摘要

上周,我的测试同事告诉我,你的用户名怎么还允许中文啊?当时我心里就想,你们测试肯定又搞错接口了,我用的是正则w过滤了参数,怎么可能出错,除非python正则系统出错了,那是不可能的。本着严谨的作风,我自己先测试一下,没问题看我怎么怼回去。

上周,我的测试同事告诉我,你的用户名怎么还允许中文啊?当时我心里就想,你们测试肯定又搞错接口了,我用的是正则w过滤了参数,怎么可能出错,除非python正则系统出错了,那是不可能的。本着严谨的作风,我自己先测试一下,没问题看我怎么怼回去。可是当我测试,我就懵逼了,中文真TM都验证通过,不对啊,我以前也是这么过滤参数的,测试没问题啊?唯一的区别是现在用的是python3
上网搜了一圈,发现没有一篇文章讲述Python2和Python3的正则在处理字符串是的区别,都是一视同仁,知道我去翻了一遍官方文档,才明白怎么回事。

问题复现

我们都知道,Python有个正则规则\w,几乎所有的网上博客文章都告诉你,这个规则匹配字母数字及下划线,但实际并不是这样:
有Python2代码如下:

~|⇒ pythonPython 2.7.10 (default, Aug 17 2018, 19:45:58)
[GCC 4.2.1 Compatible Apple LLVM 10.0.0 (clang-1000.0.42)] on darwinType "help", "copyright", "credits" or "license" for more infORMation.>>> import re>>> aa = '捕蛇者说'>>> re.match('\w{1,20}', aa)>>> bb = 'abc123ADB'>>> re.match('\w{1,20}', bb)
<_sre.SRE_Match object at 0x1031b0b28>

我们可以看到,在python2中,\w是无法匹配中文的。那么,同样的代码在Python3中运行结果是什么样子的了?

~|⇒ python3Python 3.7.1 (default, Nov 28 2018, 11:55:14)
[Clang 9.0.0 (clang-900.0.39.2)] on darwinType "help", "copyright", "credits" or "license" for more information.>>> import re>>> aa = '捕蛇者说'>>> re.match('\w{1,20}', aa)
<re.Match object; span=(0, 4), match='捕蛇者说'>>>> bb = 'abc123ADB'>>> re.match('\w{1,20}', bb)
<re.Match object; span=(0, 9), match='abc123ADB'>

但在Python3中\w是可以匹配中文的,这是怎么回事了?要回答这个问题,我们要回到Python官方文档中来寻找答案。

解决问题

当我们仔细阅读Python的官方文档时,就会发现,对于同样的正则规则\w,Python2和Python3区别好大,我们先来看看Python2:

When the LOCALE and UNICODE flags are not specified, matches any alphanumeric character and the underscore; this is equivalent to the set [a-zA-Z0-9_]. With LOCALE, it will match the set [0-9_] plus whatever characters are defined as alphanumeric for the current locale. If UNICODE is set, this will match the characters [0-9_] plus whatever is classified as alphanumeric in the Unicode character properties database.

翻译一下:当没有设置LOCALE(re.L)和UNICODE(re.U)标志,匹配数字字母和下划线,如果设置了LOCALE(re.L)则匹配数字下划线和LOCALE文字。如果设置了UNICODE(re.U)标志,匹配数字下划线和Unicode字符集里的字符。

那么Python3了:

对于 Unicode (str) 样式:
匹配Unicode词语的字符,包含了可以构成词语的绝大部分字符,也包括数字和下划线。如果设置了 ASCII 标志,就只匹配 [a-zA-Z0-9_] 。
对于8位(bytes)样式:
匹配ASCII字符中的数字和字母和下划线,就是 [a-zA-Z0-9_] 。如果设置了 LOCALE 标记,就匹配当前语言区域的数字和字母和下划线。

到此,我明白了,默认情况下,不设置任何标志,Python2 w匹配ASCII字符集里的字符,包括数字字符和下划线,Python3 w匹配数字下划线和Unicode字符集。所以,为了迁移方便,如果你想匹配ASCII字符集里的字符,指定标志为re.A,如果你想匹配Unicode字符集里的字符,指定标志为re.U。

总结

到此,我的问题是彻底解决了,但也有两个教训:

  • 看网上的教程要多注意,特别是教程里的环境和自己环境的区别
  • 多看官方文档

关于Python2和Python3,还有很多区别,这里就不一一列举了,欢迎大家留言讨论。

--结束END--

本文标题: 同样是Python,Python3和P

本文链接: https://lsjlt.com/news/193504.html(转载时请注明来源链接)

有问题或投稿请发送至: 邮箱/279061341@qq.com    QQ/279061341

猜你喜欢
  • 同样是Python,Python3和P
    上周,我的测试同事告诉我,你的用户名怎么还允许中文啊?当时我心里就想,你们测试肯定又搞错接口了,我用的是正则w过滤了参数,怎么可能出错,除非Python正则系统出错了,那是不可能的。本着严谨的作风,我自己先测试一下,没问题看我怎么怼回去。...
    99+
    2023-01-31
    Python
  • centos 7 安装python3和P
    一、添加epel源yum install epel-release二、安装Python3.4,装完再升级吧yum install python34三、安装pip3yum install python34-setuptoolseasy_ins...
    99+
    2023-01-31
    centos
  • 哦?原来Python 面试题是这样的,P
    本面试题题库,由公号:非本科程序员 整理发布 第1题:是否遇到过python的模块间循环引用的问题,如何避免它 这是代码结构设计的问题,模块依赖和类依赖 如果老是觉得碰到循环引用可能的原因有几点: 可能是模块的分界线划错地方了 可能...
    99+
    2023-01-31
    是这样 面试题 Python
  • C语言中*p+1和*(p+1)之间有什么不同
    本篇内容主要讲解“C语言中*p+1和*(p+1)之间有什么不同”,感兴趣的朋友不妨来看看。本文介绍的方法操作简单快捷,实用性强。下面就让小编来带大家学习“C语言中*p+1和*(p+1)之间有什么不同”吧!区别是:1、*p表示此指针指向的内存...
    99+
    2023-06-20
  • delete[] p->elems和free(p->elems)区别是什么
    这篇文章主要讲解了“delete[] p->elems和free(p->elems)区别是什么”,文中的讲解内容简单清晰,易于学习与理解,下面请大家跟着小编的思路慢慢深入,一起来研究和学习“delete[] p->ele...
    99+
    2023-07-05
  • 野子科技——同时使用Python2和P
    野子电竞数据官网改版https://www.xxe.io/ 全新登场安装从官网或者Python部落都可以下载Python2.x和Python3.x的版本,注意一下系统就好 将Python2.x和Python3.x安装到不同的文件夹里面。例...
    99+
    2023-01-31
    科技
  • c语言中*p和p的区别是什么
    区别:1、表示的含义不同,“*p”表示此指针指向的内存地址中存放的内容,“p”表示一个指针变量的名字,指此指针变量所指向的内存地址。2、输出的格式不同,“*p”输出的一般是一个和指针类型一致的变量或者常量,“p”输出的是一个16进制数, 输...
    99+
    2023-05-14
    指针 C语言
  • Python3和Python2有什么不同
    今天就跟大家聊聊有关Python3和Python2有什么不同,可能很多人都不太了解,为了让大家更加了解,小编给大家总结了以下内容,希望大家根据这篇文章可以有所收获。1、打印时,py2需要可以不需要加括号,py3 需要python 2 :pr...
    99+
    2023-06-15
  • python面试题Python2.x和P
    所属网站分类: 面试经典 > python 作者:外星人入侵 原文链接: http://www.pythonheidong.com/blog/article/22/ 来源:python黑洞网 www.pythonheidon...
    99+
    2023-01-31
    面试题 python
  • CSS中div、br和p区别是什么
    这篇文章主要介绍“CSS中div、br和p区别是什么”的相关知识,小编通过实际案例向大家展示操作过程,操作方法简单快捷,实用性强,希望这篇“CSS中div、br和p区别是什么”文章能帮助大家解决问题。 一...
    99+
    2024-04-02
  • ASP 和 Spring 的接口同步是怎样实现的?
    ASP 和 Spring 都是常见的 Web 应用程序框架,它们都提供了接口同步的实现方式。本篇文章将从 ASP 和 Spring 的角度出发,介绍它们的接口同步实现方式。 一、ASP 的接口同步实现方式 在 ASP 中,接口同步可以通过使...
    99+
    2023-09-02
    同步 spring 接口
  • NPM 同步:Python 和 Bash 是否是最佳选择?
    在开发 Node.js 应用程序时,NPM 是一个必不可少的工具。NPM 是 Node.js 包管理器,它允许您安装和管理依赖项,并将其添加到您的项目中。但是,在使用 NPM 时,会发现有时下载速度非常慢,特别是当您的依赖项数量很大时。为...
    99+
    2023-09-05
    bash 同步 npm
  • 同一段程序在Java和C中的不同结果是怎么样的
    今天就跟大家聊聊有关同一段程序在Java和C中的不同结果是怎么样的,可能很多人都不太了解,为了让大家更加了解,小编给大家总结了以下内容,希望大家根据这篇文章可以有所收获。C语言:#include <stdio.h>&n...
    99+
    2023-06-17
  • debian下openvz和kvm同机部署安装是怎样的
    本篇文章给大家分享的是有关debian下openvz和kvm同机部署安装是怎样的,小编觉得挺实用的,因此分享给大家学习,希望大家阅读完这篇文章后可以有所收获,话不多说,跟着小编一起来看看吧。最近搞了个机器。想搞成同时支持openvz和kvm...
    99+
    2023-06-13
  • C++和Python有什么相同和不同
    c++++ 和 python 的主要区别是:范例:c++ 是编译语言,而 python 是解释语言。性能:c++ 是性能导向语言,而 python 更注重可读性和快速开发。类型系统:c+...
    99+
    2024-05-14
    python c++ 网络编程
  • python注释和运算符是怎样的
    python注释和运算符是怎样的,相信很多没有经验的人对此束手无策,为此本文总结了问题出现的原因和解决方法,通过这篇文章希望你能解决这个问题。1.多文件项目演练在day02下创建两个python文件先点中一个文件,右键运行;右上角会出现文件...
    99+
    2023-06-22
  • Python2和Python3对中分数的转化有何不同
    这篇文章主要讲解了“Python2和Python3对中分数的转化有何不同”,文中的讲解内容简单清晰,易于学习与理解,下面请大家跟着小编的思路慢慢深入,一起来研究和学习“Python2和Python3对中分数的转化有何不同”吧!在从VNPY1...
    99+
    2023-06-01
  • Deepin 20.2中安装Python3和python3-pip的方法是什么
    这篇文章给大家介绍Deepin 20.2中安装Python3和python3-pip的方法是什么,内容非常详细,感兴趣的小伙伴们可以参考借鉴,希望对大家能有所帮助。首先声明,在Deepin 20.2系统中有自带Python的,并且默认使用P...
    99+
    2023-06-26
  • Python实现不同样式二维码
    目录有趣的事实开始用于分享URL的QR码携带WIFI详细信息的QR码联系信息的二维码用于其他目的的二维码把所有东西都保存在内存中二维码的创造性与家用式的想法当你提到二维码时,大多数人...
    99+
    2023-01-06
    Python二维码 Python二维码生成 Python制作二维码
  • Linux文件同步rsync是怎样的
    这篇文章将为大家详细讲解有关Linux文件同步rsync是怎样的,文章内容质量较高,因此小编分享给大家做个参考,希望大家阅读完这篇文章后对相关知识有一定的了解。rsync是Linux系统下的文件同步和数据传输工具,它采用“rsync”算法,...
    99+
    2023-06-28
软考高级职称资格查询
编程网,编程工程师的家园,是目前国内优秀的开源技术社区之一,形成了由开源软件库、代码分享、资讯、协作翻译、讨论区和博客等几大频道内容,为IT开发者提供了一个发现、使用、并交流开源技术的平台。
  • 官方手机版

  • 微信公众号

  • 商务合作