专栏首页快学Python一个符号、一个案例,这篇 "正则表达式" 案例教学,看了的都说好!

一个符号、一个案例,这篇 "正则表达式" 案例教学,看了的都说好!

人生苦短,快学Python!

前几天看到一篇文章,链接如下:

秀!这应该是最好的 “re正则表达式” 使用教程了

文章中,只是简单罗列出了re正则表达式中,常用的匹配符号,但是并没有详细举例说明。

很多朋友可能只是看着有感觉,但是仍然不会用。今天这篇文章,我将会为大家举例讲解正则表达式中常用的匹配符号。一个符号、一个案例,学起来超方便哦!

好了,废话不多说,咱们直接开干。

7个普通元字符

首先介绍的是7个 普通元字符,详细介绍如下图,它们在正则表达式中,都有着自己特殊的含义。

1 [ ]符号

案例如下:

import re

str1 = "acb azb abb a6b aab"

result1 = re.findall("a[a-z]b",str1) ①
result2 = re.findall("a[0-9]b",str1) ②
result3 = re.findall("a[za6]b",str1) ③

print(result1)
print(result2)
print(result3)

结果如下:

代码解释:不管是①②③,表示匹配开头是a,末尾是b。唯一不同的就是[ ]符号中匹配值不同。

  • ①处表示中间的字符,只要是a-z字母中任何一个,都可以被匹配到。
  • ②处表示中间的字符,只要是0-9数字中任何一个,都可以被匹配到。
  • ③处表示中间的字符,只能是z或a或6这三者中任何一个,才能被匹配到。

2 |或运算符

案例如下:

import re

str2 = "我是孙悟空,您可以称呼我为齐天大圣!"

result1 = re.findall("孙悟空|齐天大圣",str2)

print(result1)

结果如下:

代码解释:要么匹配孙悟空,要么匹配齐天大圣。

3 \转义字符

案例如下:

import re

str3 = "\n123456" ①
str4 = "\\n123456" ②
str5 = r"\n123456" ③

result3 = re.findall("n",str3)
result4 = re.findall("n",str4)
result5 = re.findall("n",str5)

print(result3)
print(result4)
print(result5)

结果如下:

代码解释:观察①②③处的区别,我们分别注意\的个数和r的用法。

  • ①处一个转义字符 + 字母n,是一个特殊整体\n,用于表示换行符,因此匹配不到n这个字母。
  • ②处两个转义字符 + 字母n,其中\n是一个特殊整体,再加上一个转义符号\,就将其变为一个普通字母n,因此匹配到了n。
  • ③处其实和②的含义一样,也可以将特殊整体\n,变为一个普通字母n,因此同样可以匹配到n。

4 ^和$符号

案例如下:

import re

str6 = "你来自哪里?我来自湖北省"

result7 = re.findall("^你",str6)
result8 = re.findall("^来",str6)

result9 = re.findall("省$",str6)
result10 = re.findall("湖北$",str6)

print(result7)
print(result8)
print(result9)
print(result10)

结果如下:

代码解释:一个用于匹配开头,一个用于匹配结尾。只有开头或结尾,与你要匹配的值一致,才能被匹配到。

5 .*?符号

案例如下:

import re

str6 = "abcdaabb"

result10 = re.findall("a.b",str7) ①
result11 = re.findall("a*b",str7) ②
result12 = re.findall("a?b",str7) ③

result13 = re.findall("a.*b",str7) ④
result14 = re.findall("a.*?b",str7) ⑤

print(result10)
print(result11)
print(result12)
print(result13)
print(result14)

结果如下:

代码解释:点号一般与*号和?号搭配使用。仔细观察①-⑤处的正则表达式,开头和结尾都是a、b,唯一不同的就是它们之间的符号。

  • ①处点号表示匹配(除了换行符)任意单个字符。因此,只要开头是a,结尾是b,中间是任何一个单个字符,都会被匹配上。
  • ②处*号表示匹配前面一个字符0或多次,在这里 * 号前面是a。因此,只要结尾是b,前面是>=0个a的值,都会被匹配上。
  • ③处?号表示匹配前面一个字符最多一次,在这里 * 号前面是a。因此,前面是大一等于0、小于等于1个a的值,都会被匹配上。
  • ④.*组合 ,称为“贪婪匹配”,是因为它会匹配到尽可能多的内容。原本开头是a,那么只要找到b,就是一个返回值。但是贪婪匹配不这样,他会一直朝后面走,直到找到最后一个b才肯罢休,然后返回一个超级长的字符串。
  • ⑤.*?组合 ,称为“非贪婪匹配”,就是为了制止贪婪匹配而生的。他舅不贪得无厌,只要是开头是a,你后面不是想要b吗,我碰到第一个就给你返回了。

6 ( )符号

案例如下:

import re

str8 = "a321b木头人c"

result15 = re.findall("a(\d+)b([\u4e00-\u9fa5]+)c",str8)

print(result15)

结果如下:

代码解释:()表示一个组,只要是()中的内容,最后都会被返回。

6个特殊字符

接着介绍的是6个常用字母,它们与转义符号搭配,有着自己独特的含义;

1 \d与\D

案例如下:

import re

str1 = "123\n黄同学@#%嘻嘻\t"

result1 = re.findall("\d",str1)
result2 = re.findall("\D",str1)

print(result1)
print(result2)

结果如下:

代码解释:\d仅匹配数字,\D用于匹配非数字,很好理解。

2 \s与\S

案例如下:

import re

str2 = "\r123\n黄同学@#%嘻嘻\t"

result3 = re.findall("\s",str2)
result4 = re.findall("\S",str2)

print(result3)
print(result4)

结果如下:

代码解释:\s仅匹配空白字符,\S用于匹配非空白字符(这个更常用)。

3 \w与\W

案例如下:

import re

str3 = "\r123\n黄同学_@#%嘻嘻\t"

result5 = re.findall("\w",str3)
result6 = re.findall("\W",str3)

print(result5)
print(result6)

结果如下:

代码解释:\w相当于[A-Za-Z0-9_],超好用(值得注意),\W匹配非单词字符,了解即可。

本文分享自微信公众号 - 快学Python(kxpython),作者:黄伟呢

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

原始发表时间:2021-07-15

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

我来说两句

0 条评论
登录 后参与评论

相关文章

  • 一篇值得收藏的正则表达式文章

    目前越来越多的网站、编辑器、编程语言都已支持一种叫“正则表达式”的字符串查找“公式”,有过编程经验的同学都应该了解正则表达式(Regular Expressio...

    龙哥
  • 关于正则表达式,这篇都讲清楚了

    目前越来越多的网站、编辑器、编程语言都已支持一种叫“正则表达式”的字符串查找“公式”,有过编程经验的同学都应该了解正则表达式(Regular Expressio...

    AI科技大本营
  • Java正则速成秘籍(二)之心法篇

    导读 正则表达式是什么?有什么用? 正则表达式(Regular Expression)是一种文本规则,可以用来校验、查找、替换与规则匹配的文本。 又爱又恨的正...

    静默虚空
  • Java正则速成秘籍(一)之招式篇

    目录 导读 概述 Pattern类 Matcher类 校验文本是否与正则规则匹配 案例:lookingAt vs find vs mat...

    用户1257215
  • 正则表达式学习笔记(初级篇)

    正则对于新人来说是一个头疼的名字,让人闻而生畏。但是,在我看来,正则,并没有那么神秘,希望能通过这篇正则表达式入门教程解除正则新人对于正则的畏惧感。

    一头小山猪
  • Mathematica 谜中智:二十四点 全新计算

    1. 一副扑克牌中抽去大小王剩下52 张,随后取4张数字牌,每张扑克牌代表一个数字,数值范围从1到13,其中 Jack (J)、Queen (Q) 和 King...

    WolframChina
  • 一个由正则表达式引发的血案(解决版)

    正则表达式一直以来是广大码农处理字符串的福音,但与此同时,也引发过血案。我们发表在ASE'18的论文“ReScue: Crafting Regular Expr...

    猿哥
  • 正则表达式真的很骚,可惜你不会写!

    正则表达式在几乎所有语言中都可以使用,无论是前端的JavaScript、还是后端的Java、c#。他们都提供相应的接口/函数支持正则表达式。

    Java技术栈
  • Java正则速成秘籍(一)之招式篇

    导读 正则表达式是什么?有什么用? 正则表达式(Regular Expression)是一种文本规则,可以用来校验、查找、替换与规则匹配的文本。 又爱又恨的正...

    静默虚空
  • 巧用“搜索”解决自学编程遇到的难题

    假如你在做一个 JavaScript项目,其中你得到了一个字符串格式的日期(比如, ’2014-10-08’),你想要计算下一天的日期是什么。我们可以用 par...

    博文视点Broadview
  • Go语言中使用正则提取匹配的字符串

    我们在做爬虫的过程中,需要对爬取到的内容处理,比如说提取出我们需要的内容和文本,比如城市信息、人员信息等等,除了字符串查找外,使用正则匹配是比较优雅和方便的方案...

    飞雪无情
  • 【爬虫必备基础】⭐通宵爆肝两万字xpath教程⭐学不会找我!

    XPath 是一种用于寻址 XML 文档部分的语言。它在 XSLT 中使用并且是 XQuery 的子集。这个库也可用于大多数其他编程语言。

    川川菜鸟
  • 如何用 Python 和正则表达式抽取文本结构化信息?

    例如在咱们之前介绍过的《贷还是不贷:如何用 Python 和机器学习帮你决策?》和《如何用 Python 和深度神经网络锁定即将流失的客户?》中,你都看到了,机...

    王树义
  • Scheme语言实例入门--怎样写一个“新型冠状病毒感染风险检测程序” 1,表达式2,原子3,表(list) 4,点对(pair)5,向量(vector)6,变量7,

    2020的春季中小学受疫情影响,一直还没有开学,孩子宅在家说想做一个学校要求的研究项目,我就说你做一个怎么样通过编程来学习数学的小项目吧,用最简单的计算...

    用户1177503
  • AI 技术讲座精选:数学不好,也可以学习人工智能(六)——巧用数学符号

    【AI100 导读】欢迎阅读《数学不好,也可以学好人工智能》系列的第六篇文章。如果你错过了之前的五部分,一定记得把它们找出来看一下!这篇文章作者会帮你学习数学符...

    AI科技大本营
  • 酷!Git/SQL/正则表达式在线刷题学习网站,我给你们找来了

    虽说我没事就喜欢喷应试教育,但我也从应试教育中发现了一个窍门:如果能够以刷题的形式学习某项技能,效率和效果是最佳的。

    帅地
  • 一起刷题学习 Git/SQL/正则表达式

    虽说我没事就喜欢喷应试教育,但我也从应试教育中发现了一个窍门:如果能够以刷题的形式学习某项技能,效率和效果是最佳的。

    公众号guangcity
  • 一起刷题学习 Git/SQL/正则表达式

    虽说我没事就喜欢喷应试教育,但我也从应试教育中发现了一个窍门:如果能够以刷题的形式学习某项技能,效率和效果是最佳的。

    五分钟学算法
  • 一起刷题学习 Git/SQL/正则表达式

    虽说我没事就喜欢喷应试教育,但我也从应试教育中发现了一个窍门:如果能够以刷题的形式学习某项技能,效率和效果是最佳的。

    labuladong

扫码关注云+社区

领取腾讯云代金券