iis服务器助手广告广告
返回顶部
首页 > 资讯 > 后端开发 > 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://www.lsjlt.com/news/193504.html(转载时请注明来源链接)

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

本篇文章演示代码以及资料文档资料下载

下载Word文档到电脑,方便收藏和打印~

下载Word文档
猜你喜欢
  • 同样是Python,Python3和P
    上周,我的测试同事告诉我,你的用户名怎么还允许中文啊?当时我心里就想,你们测试肯定又搞错接口了,我用的是正则w过滤了参数,怎么可能出错,除非Python正则系统出错了,那是不可能的。本着严谨的作风,我自己先测试一下,没问题看我怎么怼回去。...
    99+
    2023-01-31
    Python
  • 哦?原来Python 面试题是这样的,P
    本面试题题库,由公号:非本科程序员 整理发布 第1题:是否遇到过python的模块间循环引用的问题,如何避免它 这是代码结构设计的问题,模块依赖和类依赖 如果老是觉得碰到循环引用可能的原因有几点: 可能是模块的分界线划错地方了 可能...
    99+
    2023-01-31
    是这样 面试题 Python
  • ASP 和 Spring 的接口同步是怎样实现的?
    ASP 和 Spring 都是常见的 Web 应用程序框架,它们都提供了接口同步的实现方式。本篇文章将从 ASP 和 Spring 的角度出发,介绍它们的接口同步实现方式。 一、ASP 的接口同步实现方式 在 ASP 中,接口同步可以通过使...
    99+
    2023-09-02
    同步 spring 接口
  • 同一段程序在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
  • NPM 同步:Python 和 Bash 是否是最佳选择?
    在开发 Node.js 应用程序时,NPM 是一个必不可少的工具。NPM 是 Node.js 包管理器,它允许您安装和管理依赖项,并将其添加到您的项目中。但是,在使用 NPM 时,会发现有时下载速度非常慢,特别是当您的依赖项数量很大时。为...
    99+
    2023-09-05
    bash 同步 npm
  • python注释和运算符是怎样的
    python注释和运算符是怎样的,相信很多没有经验的人对此束手无策,为此本文总结了问题出现的原因和解决方法,通过这篇文章希望你能解决这个问题。1.多文件项目演练在day02下创建两个python文件先点中一个文件,右键运行;右上角会出现文件...
    99+
    2023-06-22
  • Windows 同步:Python 和 JavaScript 的新趋势是什么?
    在计算机科学领域,数据同步是一项非常重要的任务。它可以确保在不同的设备和系统之间保持数据的一致性和完整性。在 Windows 操作系统中,Python 和 JavaScript 成为了最新的数据同步趋势。在本文中,我们将探讨这两种语言在 ...
    99+
    2023-09-09
    javascript windows 同步
  • Python升级和兼容性配置是怎样的
    Python升级和兼容性配置是怎样的,相信很多没有经验的人对此束手无策,为此本文总结了问题出现的原因和解决方法,通过这篇文章希望你能解决这个问题。Python里面有个现象很奇怪,一般要学习Python都会纠结是学习2和3,这个差别和纠结Ja...
    99+
    2023-06-04
  • Python 和 JavaScript:Windows 同步的技术难点和挑战是什么?
    在计算机科学领域中,Python 和 JavaScript 是两种广泛使用的编程语言。Python 是一种高级编程语言,常用于数据分析、机器学习和人工智能等领域;而 JavaScript 则是一种用于开发 Web 应用的脚本语言。Wind...
    99+
    2023-09-09
    javascript windows 同步
  • Java编程语言中注意线程安全和同步是怎样的
    这篇文章给大家介绍Java编程语言中注意线程安全和同步是怎样的,内容非常详细,感兴趣的小伙伴们可以参考借鉴,希望对大家能有所帮助。Java编程语言对于使用者来说是一个相当简单的编程语言。但是在使用的时候还是需要我们不断注意相关问题,下面我们...
    99+
    2023-06-17
  • Python的输入,输出和标识符是怎样的
    这篇文章给大家介绍Python的输入,输出和标识符是怎样的,内容非常详细,感兴趣的小伙伴们可以参考借鉴,希望对大家能有所帮助。一、标识符何为标识符?标识符是用来标识某个实体的一个符号。在编程语言中,标识符是计算机语言中作为名字的有效字符串集...
    99+
    2023-06-22
  • Python 和 JavaScript:Windows 同步的最佳解决方案是什么?
    在当今科技发展的时代,计算机已经成为人们日常生活中不可或缺的工具。而其中最为重要的两个编程语言,Python 和 JavaScript,已经成为众多开发者的首选。但是,在 Windows 操作系统下,Python 和 JavaScript...
    99+
    2023-09-09
    javascript windows 同步
  • Python中关于数据采集和解析是怎样的
    本篇文章为大家展示了Python中关于数据采集和解析是怎样的,内容简明扼要并且容易理解,绝对能使你眼前一亮,通过这篇文章的详细介绍希望你能有所收获。我们已经了解到了开发一个爬虫需要做的工作以及一些常见的问题,下面我们给出一个爬虫开发相关技术...
    99+
    2023-06-02
  • Python和Bash:最佳的日志同步方案是什么?
    日志是软件开发过程中的重要组成部分,无论是调试、故障排查还是性能分析,都需要日志的支持。但是,当我们的应用程序在分布式环境下运行时,如何将日志从不同的节点同步到中心服务器上是一个具有挑战性的问题。在这篇文章中,我们将讨论如何使用Pytho...
    99+
    2023-07-27
    bash 同步 日志
  • 日志同步:Python和Bash是否可以一起工作?
    日志同步是现代软件开发中非常重要的一个方面。在一个分布式系统中,不同的组件可能会运行在不同的机器上,而它们的日志信息需要被集中起来以便进行分析和监控。Python和Bash都是常用的脚本语言,它们都有着自己的优势和劣势。那么,Python和...
    99+
    2023-07-27
    bash 同步 日志
  • Python全栈的进程和守护进程是怎样的
    这期内容当中小编将会给大家带来有关Python全栈的进程和守护进程是怎样的,文章内容丰富且以专业的角度为大家分析和叙述,阅读完这篇文章希望大家可以有所收获。1. 理解进程进程的概念:(process)进程就是正在运行的程序,它是操作系统中,...
    99+
    2023-06-22
  • 为什么 Python 和 Bash 是同步 NPM 的绝佳选择?
    Python 和 Bash 是两种非常受欢迎的编程语言,它们都在不同的领域中发挥着重要作用。而对于那些想要管理自己的软件包的人来说,Python 和 Bash 是同步 NPM 的绝佳选择。 NPM 是 Node.js 的包管理器,它是一个非...
    99+
    2023-09-05
    bash 同步 npm
  • Python基础中os和数据结构是怎么样的
    Python基础中os和数据结构是怎么样的,很多新手对此不是很清楚,为了帮助大家解决这个难题,下面小编将为大家详细讲解,有这方面需求的人可以来学习下,希望你能有所收获。今天总结了下Python的基础,发现还是有很多基础需要巩固,直接把学习的...
    99+
    2023-06-04
  • Python列表和数组的常用操作是怎样的
    这篇文章将为大家详细讲解有关Python列表和数组的常用操作是怎样的,文章内容质量较高,因此小编分享给大家做个参考,希望大家阅读完这篇文章后对相关知识有一定的了解。Python中的列表(list)类似于C#中的可变数组(ArrayList)...
    99+
    2023-06-04
软考高级职称资格查询
编程网,编程工程师的家园,是目前国内优秀的开源技术社区之一,形成了由开源软件库、代码分享、资讯、协作翻译、讨论区和博客等几大频道内容,为IT开发者提供了一个发现、使用、并交流开源技术的平台。
  • 官方手机版

  • 微信公众号

  • 商务合作