专栏首页datartisanPython正则表达式从入门到实践(1)

Python正则表达式从入门到实践(1)

正则表达式regular expression用于描述一种字符串匹配的模式pattern,它可用于检查一个字符串是否包含某个子字符串,也可用于从字符串中提取匹配的子字符串,或者对字符串中匹配的子字符串进行替换操作。

Python正则表达式常用于进行数据清洗、数据抓取、网络爬虫等工作,能达到事半功倍的效果,非常值得学习。

正则表达式的构成元素

正则表达式由普通字符和特殊字符(也叫元字符或限定符)组成。

元字符

元字符

描述

.

匹配除换行符以外的任意字符

\d

匹配数字, 等价于字符组[0-9]

\w

匹配字母, 数字, 下划线

\s

匹配任意的空白符(包括制表符,空格,换行等)

\b

匹配单词开始或结束的位置

^

匹配行首

$

匹配行尾

反义元字符

元字符

描述

\D

匹配非数字的任意字符, 等价于[^0-9]

\W

匹配除字母,数字,下划线之外的任意字符

\S

匹配非空白的任意字符

\B

匹配非单词开始或结束的位置

[^x]

匹配除x以外的任意字符

重复限定符

  • 限定符共有6个, 假设重复次数为x次, 那么将有如下规则:

限定符

描述

*

x>=0

+

x>=1

?

x=0 or x=1

{n}

x=n

{n,}

x>=n

{n,m}

n<=x<=m

字符组

  • […] 表示枚举,匹配中括号内字符之一. 如: [xyz] 匹配字符 x, y 或 z. 如果中括号中包含元字符, 则元字符降级为普通字符, 不再具有元字符的功能, 如 [+.?] 匹配 加号, 点号或问号.
  • [m, n] 表示范围,匹配 m ~ n 范围之内的任意字符

排除性字符组

  • [^…] 匹配任何未列出的字符,. 如: [^x] 匹配除x以外的任意字符.

多选结构

  • | 就是或的意思, 表示两者中的一个. 如: a|b 匹配a或者b字符.

括号

  • 括号 常用来界定重复限定符的范围, 以及将字符分组. 如: (ab)+ 可以匹配abab..等, 其中 ab 便是一个分组.

转义字符

  • 即转义字符, 通常 * + ? | { [ ( ) ] }^ $ . # 和 空白 这些字符都需要转义.

操作符的运算优先级

  1. 转义符
  2. (), (?:), (?=), [] 圆括号或方括号
  3. *, +, ?, {n}, {n,}, {n,m} 限定符
  4. ^, $ 位置
  5. | “或” 操作

正则表达式常用函数

正则表达式旗标

小试牛刀

匹配手机号码

手机号码是一串1开头的11位号码,我们就根据此规则来书写正则表达式

①:1开头:^1

②:除去首位1,还剩下10位数字,\d表示一位数字

③:限定符{10}表示字符重复10次

④:到这里,匹配就应该结束了,所以还需要设置结尾符号$

⑤:综合上述信息,手机号码的正则表达式为^1\d{10}$

匹配身份证号码

身份证号码有15位和18位两种,其中18位号码结尾可能是x

①:1~8开头:^[1-8]

②:除去首位,15位身份证号还剩下14位数字,\d{14}

③:再加上结尾符,15位身份证正则表达式为:^[1-8]\d{14}$

④:除去首位,18位身份证号还剩下17位数字,且最后一位可能是X\d{16}(\d|X)

⑤:再加上结尾符,18位身份证正则表达式为:^[1-8]\d{16}(\d|X)$

⑥:将15位和18位两种正则结合,身份证号码的正则表达式为^[1-8](\d{14}|\d{16}(\d|X))$

本文分享自微信公众号 - 乐享数据8090(gh_5703273a0562),作者:mba1398

原文出处及转载信息见文内详细说明,如有侵权,请联系 yunjia_community@tencent.com 删除。

原始发表时间:2020-06-08

本文参与腾讯云自媒体分享计划,欢迎正在阅读的你也加入,一起分享。

我来说两句

0 条评论
登录 后参与评论

相关文章

  • 如何处理数据库表字段值中的特殊字符?

    现网业务运行过程中,可能会遇到数据库表字段值包含特殊字符的场景,此场景虽然不常见,但只要一出现,其影响却往往是致命的,且排查难度较高,非常有必要了解一下。

    披头
  • Power Query 中Python的使用

    Power Query2018年就已经支持python了,你尝试过吗?今天说一下power query使用python的步骤和简单应用。(python代码使用技...

    披头
  • NB-IoT必知必会

    NB-IoT系统中引入SCEF网元,其主要功能是:上下行非IP数据投递、T6连接管理、非IP数据传输授权检查

    披头
  • 17个案例带你3分钟搞定Linux正则表达式

    来源:https://blog.ansheng.me/article/examples-of-linux-regular-expressions

    用户1634449
  • 17个案例带你3分钟搞定Linux正则表达式

    正则表达式是一种字符模式,用于在查找过程中匹配制定的字符。 元字符通常在Linux中分为两类: Shell元字符,由Linux Shell进行解析; 正则表达式...

    小小科
  • 17个案例带你3分钟搞定Linux正则表达式

    正则表达式一般以文本行进行处理,在进行下面实例之前,先为grep命令设置--color参数:

    马哥linux运维
  • 30分钟玩转「正则表达式」

    推荐阅读:Jeffrey Friedl 《精通正则表达式(第3版)》,本文是该书的读书笔记。

    Yano_nankai
  • 30分钟玩转「正则表达式」

    推荐阅读:Jeffrey Friedl 《精通正则表达式(第3版)》,本文是该书的读书笔记。

    Yano_nankai
  • 正则表达式-入门

    前言:今天先分享正则表达式的基础元字符,后续会分享正则表达式的子表达式,回溯引用,前后查找,嵌入条件,,全部分享完成之后,会尝试着去分享一些例子与拆分介...

    杨小杰
  • JavaScript(RegExp正则匹配)

    正则表达式是一个描述字符模式的对象。JavaScript的RegExp对象和String对象定义了使用正则表达式来执行强大的模式匹配和文本检索与替换函数的方法。

    aehyok

扫码关注云+社区

领取腾讯云代金券