我的编程空间,编程开发者的网络收藏夹
学习永远不晚

Python正则表达式的使用教程

短信预约 -IT技能 免费直播动态提醒
省份

北京

  • 北京
  • 上海
  • 天津
  • 重庆
  • 河北
  • 山东
  • 辽宁
  • 黑龙江
  • 吉林
  • 甘肃
  • 青海
  • 河南
  • 江苏
  • 湖北
  • 湖南
  • 江西
  • 浙江
  • 广东
  • 云南
  • 福建
  • 海南
  • 山西
  • 四川
  • 陕西
  • 贵州
  • 安徽
  • 广西
  • 内蒙
  • 西藏
  • 新疆
  • 宁夏
  • 兵团
手机号立即预约

请填写图片验证码后获取短信验证码

看不清楚,换张图片

免费获取短信验证码

Python正则表达式的使用教程

这篇文章主要介绍“Python正则表达式的使用教程”,在日常操作中,相信很多人在Python正则表达式的使用教程问题上存在疑惑,小编查阅了各式资料,整理出简单好用的操作方法,希望对大家解答”Python正则表达式的使用教程”的疑惑有所帮助!接下来,请跟着小编一起来学习吧!

 介绍:

正则表达式用于识别模式(pattern)是否存在于给定的字符(字符串)序列中。它们有助于处理文本数据,这通常是涉及文本挖掘的数据科学项目的先决条件。您一定遇到过一些正则表达式的应用程序:它们在服务器端用于在注册过程中验证电子邮件地址或密码的格式,用于解析文本数据文件以查找,替换或删除某些字符串等。

内容:

正则表达式非常强大,在本教程中,您将学习在Python中使用它们。您将涵盖以下主题:

  • Python中的正则表达式

  • 基本字符:普通字符

  • 通配符:特殊字符

  • 重复次数

  • 使用正则表达式进行分组

  • 贪婪vs非贪婪匹配

  • re Python库 --- search() 与 match()

Python中的正则表达式

  • 导入re模块

在Python中,re模块支持正则表达式。使用以下命令导入此模块:

Import re
  • 基本模式:普通字符

您可以使用普通字符轻松解决Python中的许多基本模式。普通字符是最简单的正则表达式。它们完全匹配,并且在正则表达式语法中没有特殊含义。

示例为" A"," a"," X"," 5"。

普通字符可用于执行简单的完全匹配:

>>>Import re >>>pattern = r"Cookie" >>>sequence = "Cookie" >>>if re.match(pattern, sequence): >>> print("Match!") >>>else:  >>> print("Not a match!") Match!

match()如果文本与模式匹配,则该函数返回匹配对象。否则返回None。

不过,现在让我们关注普通字符!您是否注意到r模式的开头Cookie?

这称为原始字符串文字。它更改了字符串文字的解释方式。这样的文字会按其出现时进行存储。

例如,\当前缀为a时只是一个反斜杠,r而不是被解释为转义序列。您将看到带有特殊字符的含义。有时,语法涉及反斜杠转义的字符,并且为了防止将这些字符解释为转义序列,请使用原始r前缀。在本示例中,您实际上并不需要它,但是使用它来保持一致性是一种很好的做法。

  • 通配符:特殊字符

特殊字符是与正则表达式不匹配但在正则表达式中使用时实际上具有特殊含义的字符。

最广泛使用的特殊字符是:

  •  . -匹配除换行符以外的任何单个字符。

re.search(r'Co.k.e', 'Cookie').group() 'Cookie'

该group()函数返回与匹配的字符串re。稍后您将更详细地看到此功能。

  • \w - 小写w。匹配任何单个字母,数字或下划线。

re.search(r'Co\wk\we', 'Cookie').group() 'Cookie'
  •  \W - 大写w。匹配不属于\ w的任何字符(小写w)。

re.search(r'C\Wke', 'C@ke').group() 'C@ke'
  • \s - 小写字母s。匹配单个空格字符,例如:空格,换行符,制表符,返回值。

re.search(r'Eat\scake', 'Eat cake').group() 'Eat cake'
  •  \S - 大写字母s。匹配不属于\ s(小写s)的任何字符。

re.search(r'Cook\Se', 'Cookie').group() 'Cookie'
  • \t - 小写字母t。匹配标签。

re.search(r'Eat\tcake', 'Eat cake').group() 'Eat\tcake'
  • \n - 小写字母n。匹配换行符。

  • \r - 小写字母r。比赛归来。

  • \d - 小写字母d。匹配十进制数字0-9。

re.search(r'c\d\dkie', 'c00kie').group()'c00kie'
  • ^-插入符号 在字符串的开头匹配一个模式。

re.search(r'^Eat', 'Eat cake').group()'Eat'
  • $ -匹配字符串末尾的模式。

re.search(r'cake$', 'Eat cake').group() 'cake'

[abc] -匹配a或b或c。

[a-zA-Z0-9]-匹配(a至z)或(A至Z)或(0至9)中的任何字母。可以通过补充集合来匹配不在范围内的字符。如果集合的第一个字符是^,则所有不在集合中的字符都将被匹配。

re.search(r'Number: [0-6]', 'Number: 5').group() 'Number: 5' # Matches any character except 5 re.search(r'Number: [^5]', 'Number: 0').group() 'Number: 0'
  • \A-大写a。仅在字符串开头匹配。也可以跨多行工作。

re.search(r'\A[A-E]ookie', 'Cookie').group() 'Cookie'
  • \b-小写字母b。仅匹配单词的开头或结尾。

re.search(r'\b[A-E]ookie', 'Cookie').group() 'Cookie'
  • \-反斜杠。如果反斜杠后面的字符是公认的转义字符,则采用该术语的特殊含义。例如,\n被视为换行符。但是,如果后面的字符\不是可识别的转义字符,则将\象任何其他字符一样对待并通过。

让我们看几个例子:

# This checks for '\' in the string instead of '\t' due to the '\' used  re.search(r'Back\\stail', 'Back\stail').group() 'Back\\stail' # This treats '\s' as an escape character because it lacks '\' at the start of '\s' re.search(r'Back\stail', 'Back tail').group() 'Back lash'
  • 重复次数

如果您要查找序列中的长模式,将变得非常乏味。幸运的是,该re模块使用以下特殊字符处理重复:

  • + -检查其左侧的一个或多个字符。

re.search(r'Co+kie', 'Cooookie').group() 'Cooookie'
  •  * -检查左侧是否有零个或多个字符。

# Checks for any occurrence of a or o or both in the given sequence re.search(r'Ca*o*kie', 'Caokie').group() 'Caokie'
  •  ? -检查其左边是否为零或一个字符。

# Checks for exactly zero or one occurrence of a or o or both in the given sequence re.search(r'Colou?r', 'Color').group() 'Color'

但是,如果您要检查序列重复的确切数目怎么办?

例如,检查应用程序中电话号码的有效性。re模块还使用以下正则表达式很好地处理了此问题:

{x} -重复x次。

{x,} -重复至少x次或更多。

{x, y} -重复至少x次,但不超过y次。

re.search(r'\d{9,10}', '0987654321').group() '0987654321'

将+和*资格赛被认为是greedy。

  • 使用正则表达式进行分组和分组

假设,当您验证电子邮件地址并想要分别检查用户名和主机时。

这是group正则表达式功能派上用场的时候。它允许您拾取匹配文本的一部分。

由括号()界定的正则表达式模式的部分称为groups。括号不会更改表达式匹配的内容,而是在匹配的序列内形成组。group()在本教程的示例中,您一直都在使用该功能。match.group()像平常一样,没有任何参数的纯文本仍然是整个匹配文本。

email_address = 'Please contact us at: support@datacamp.com' match = re.search(r'([\w\.-]+)@([\w\.-]+)', ____________) if _____:  print(match.group()) # The whole matched text  print(match.group(1)) # The username (group 1)  print(match.group(2)) # The host (group 2)

贪婪vs非贪婪匹配

当特殊字符与搜索序列(字符串)尽可能匹配时,则称为"贪婪匹配"。这是正则表达式的正常行为,但有时不希望出现这种行为:

pattern = "cookie" sequence = "Cake and cookie" heading = r'<h2>TITLE</h2>' re.match(r'<.*>', heading).group() '<h2>TITLE</h2>'

该模式<.*>匹配整个字符串,直到第二次出现为止>。

但是,如果只想匹配第一个

标记,则可以使用贪婪的限定符*?,该限定符匹配的文字越少越好。

?在限定符之后添加使其以非贪婪或最小的方式执行匹配;也就是说,将匹配尽可能少的字符。跑步时<.*>,您只会与比赛<h2>。

heading = r'<h2>TITLE</h2>' re.match(r'<.*?>', heading).group() '<h2>'

re Python库

Re  Python中的库提供了几个函数,使其值得掌握。您已经看过其中的一些,例如re.search(),re.match()。让我们详细检查一些有用的功能:

search(pattern, string, flags=0)

使用此功能,您可以扫描给定的字符串/序列,以查找正则表达式产生匹配项的第一个位置。如果找到,则返回相应的匹配对象;否则,None如果字符串中没有位置与模式匹配,则返回。请注意,这None与在字符串中的某个点找到零长度匹配不同。

pattern = "cookie" sequence = "Cake and cookie" re.search(pattern, sequence).group() 'cookie'
  • match(pattern, string, flags=0)

如果字符串开头的零个或多个字符与模式匹配,则返回相应的匹配对象。否则None,如果字符串与给定的模式不匹配,则返回。

pattern = "C" sequence1 = "IceCream" # No match since "C" is not at the start of "IceCream" re.match(pattern, sequence1) sequence2 = "Cake" re.match(pattern,sequence2).group() 'C'

search() 与 match()

该match()函数仅在字符串的开头检查匹配项(默认情况下),而该search()函数在字符串的任何位置检查匹配项。

  • findall(pattern, string, flags=0)

查找整个序列中所有可能的匹配项,并将它们作为字符串列表返回。每个返回的字符串代表一个匹配项。

email_address = "Please contact us at: support@datacamp.com, xyz@datacamp.com" #'addresses' is a list that stores all the possible match addresses = re.findall(r'[\w\.-]+@[\w\.-]+', email_address)for address in addresses:   print(address) support@datacamp.com xyz@datacamp.com
  • sub(pattern, repl, string, count=0, flags=0)

这就是substitute功能。它返回通过用替换替换或替换字符串中最左边的非重叠模式所获得的字符串repl。如果找不到该模式,则该字符串将原样返回。

email_address = "Please contact us at: xyz@datacamp.com" new_email_address = re.sub(r'([\w\.-]+)@([\w\.-]+)', r'support@datacamp.com', email_address) print(new_email_address) Please contact us at: support@datacamp.com
  • compile(pattern, flags=0)

将正则表达式模式编译为正则表达式对象。当您需要在单个程序中多次使用表达式时,使用该compile()函数保存生成的正则表达式对象以供重用会更有效。这是因为compile()缓存了传递给的最新模式的编译版本以及模块级匹配功能。

pattern = re.compile(r"cookie") sequence = "Cake and cookie" pattern.search(sequence).group() 'cookie' # This is equivalent to: re.search(pattern, sequence).group() 'cookie'

提示:可以通过指定flags值来修改表达式的行为。您可以flag在本教程中看到的各种功能中添加一个额外的参数。一些使用的标志是:IGNORECASE,DOTALL,MULTILINE,VERBOSE,等。

案例研究:使用正则表达式

通过学习一些示例,您已经了解了正则表达式在Python中的工作方式,是时候动手了!在本案例研究中,您将运用自己的知识。

import reimport requests the_idiot_url = 'https://www.gutenberg.org/files/2638/2638-0.txt'  def get_book(url):  # Sends a http request to get the text from project Gutenberg  raw = requests.get(url).text  # Discards the metadata from the beginning of the book  start = re.search(r"\*\*\* START OF THIS PROJECT GUTENBERG EBOOK .*\*\*\*",raw ).end()  # Discards the metadata from the end of the book  stop = re.search(r"II", raw).start()  # Keeps the relevant text  text = raw[start:stop]  return text  def preprocess(sentence):   return re.sub('[^A-Za-z0-9.]+' , ' ', sentence).lower()  book = get_book(the_idiot_url) processed_book = preprocess(book) print(processed_book)

在语料库中找到代词" the"的编号。提示:使用len()功能。

len(re.findall(r'the', processed_book)) 302

尝试将语料库中的每个" i"的独立实例转换为" I"。确保不要更改一个单词中出现的" i":

processed_book = re.sub(r'\si\s', " I ", processed_book) print(processed_book)

查找""语料库中有人被引号()的次数。

len(re.findall(r'\"', book)) 96

什么是由连接的话'--'在语料库?

re.findall(r'[a-zA-Z0-9]*--[a-zA-Z0-9]*', book) ['ironical--it',  'malicious--smile',  'fur--or',  ------------省略  ]

到此,关于“Python正则表达式的使用教程”的学习就结束了,希望能够解决大家的疑惑。理论与实践的搭配能更好的帮助大家学习,快去试试吧!若想继续学习更多相关知识,请继续关注编程网网站,小编会继续努力为大家带来更多实用的文章!

免责声明:

① 本站未注明“稿件来源”的信息均来自网络整理。其文字、图片和音视频稿件的所属权归原作者所有。本站收集整理出于非商业性的教育和科研之目的,并不意味着本站赞同其观点或证实其内容的真实性。仅作为临时的测试数据,供内部测试之用。本站并未授权任何人以任何方式主动获取本站任何信息。

② 本站未注明“稿件来源”的临时测试数据将在测试完成后最终做删除处理。有问题或投稿请发送至: 邮箱/279061341@qq.com QQ/279061341

Python正则表达式的使用教程

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

下载Word文档

猜你喜欢

Python正则表达式的使用教程

这篇文章主要介绍“Python正则表达式的使用教程”,在日常操作中,相信很多人在Python正则表达式的使用教程问题上存在疑惑,小编查阅了各式资料,整理出简单好用的操作方法,希望对大家解答”Python正则表达式的使用教程”的疑惑有所帮助!
2023-06-16

在python正则表达式中是怎样正确使用正则表达式

这篇文章将为大家详细讲解有关在python正则表达式中是怎样正确使用正则表达式,文章内容质量较高,因此小编分享给大家做个参考,希望大家阅读完这篇文章后对相关知识有一定的了解。现在我们已经看了一些简单的正则表达式,那么我们实际在 Python
2023-06-17

python 中正则表达式的使用

正则表达式(re)(Regular Expression)。正则表达式是对字符串操作的一种逻辑公式,就是用事先定义好的一些特定字符、及这些特定字符的组合,组成一个“规则字符串”,这个“规则字符串”用来表达对字符串的一种过滤逻辑。在pytho
2023-01-31

Python中使用正则表达式及正则表达式匹配规则详解

这篇文章主要介绍了Python中使用正则表达式以及正则表达式匹配规则,本文给大家介绍的非常详细,对大家的学习或工作具有一定的参考借鉴价值,需要的朋友可以参考下
2023-03-22

Python正则表达式经典入门教程

本文实例总结了Python正则表达式基本用法。分享给大家供大家参考,具体如下: 正则表达式在平时做文本处理(爬虫程序去解析html中的字段,在分析log文件的时候需要抓取一些关键数据)的时候经常会用到。一般我们会使用到Python的re库。
2022-06-04

python 正则表达式

正则表达式的作用:用来匹配字符串 一、字符串方法字符串提供的方法是完全匹配,不能进行模糊匹配s = 'hello world'# 字符串提供的方法是完全匹配,不能进行模糊匹配print(s.find('ll')) # 2 查找ll的位
2023-01-30

python正则表达式

笔记:一:简介 正则表达式是一个特殊的字符序列,它能帮助你方便的检查一个字符串是否与某种模式匹配。 主要介绍Python中常用的正则表达式处理函数 提高工作效率,完成内置函数无法完成的任务! 搜索常用正则表达式!--
2023-01-30

如何使用Python的正则表达式

本篇内容主要讲解“如何使用Python的正则表达式”,感兴趣的朋友不妨来看看。本文介绍的方法操作简单快捷,实用性强。下面就让小编来带大家学习“如何使用Python的正则表达式”吧!一、正则表达式介绍1.学习爬虫,为什么必须会正则表达式?
2023-06-02

Python正则表达式教程之一:基础篇

前言 之前有人提了一个需求,我一看此需求用正则表达式最合适不过。考虑到之前每次使用正则表达式,都是临时抱佛脚,于是这次我就一边完成任务一边系统的学习了一遍正则表达式。主要参考PyCon2016上的一个视频Regular Expression
2022-06-04

Python正则表达式教程之二:捕获篇

前言 在上一篇文中,我们介绍了关于Python正则表达式的基础,那么在这一篇文章里,我们将总结一下正则表达式关于捕获的用法。下面话不多说,来看看详细的介绍吧。 捕获 捕获和分组在正则表达式中有着密切的联系,一般情况下,分组即捕获,都用
2022-06-04

Python中的正则表达式

正则表达式 是包含文本和特殊字符的字符串, 为高级的文本模式匹配, 抽取, 与文本形式的搜索和替换功能提供了基础Python通过标准库re模块来支持正则表达式模式匹配的两种方法完成匹配(模式匹配)搜索(search())匹配(match()
2023-01-31

python中的正则表达式怎么使用

这篇文章主要讲解了“python中的正则表达式怎么使用”,文中的讲解内容简单清晰,易于学习与理解,下面请大家跟着小编的思路慢慢深入,一起来研究和学习“python中的正则表达式怎么使用”吧!在Python中需要通过正则表达式对字符串进行匹配
2023-07-04

编程热搜

  • Python 学习之路 - Python
    一、安装Python34Windows在Python官网(https://www.python.org/downloads/)下载安装包并安装。Python的默认安装路径是:C:\Python34配置环境变量:【右键计算机】--》【属性】-
    Python 学习之路 - Python
  • chatgpt的中文全称是什么
    chatgpt的中文全称是生成型预训练变换模型。ChatGPT是什么ChatGPT是美国人工智能研究实验室OpenAI开发的一种全新聊天机器人模型,它能够通过学习和理解人类的语言来进行对话,还能根据聊天的上下文进行互动,并协助人类完成一系列
    chatgpt的中文全称是什么
  • C/C++中extern函数使用详解
  • C/C++可变参数的使用
    可变参数的使用方法远远不止以下几种,不过在C,C++中使用可变参数时要小心,在使用printf()等函数时传入的参数个数一定不能比前面的格式化字符串中的’%’符号个数少,否则会产生访问越界,运气不好的话还会导致程序崩溃
    C/C++可变参数的使用
  • css样式文件该放在哪里
  • php中数组下标必须是连续的吗
  • Python 3 教程
    Python 3 教程 Python 的 3.0 版本,常被称为 Python 3000,或简称 Py3k。相对于 Python 的早期版本,这是一个较大的升级。为了不带入过多的累赘,Python 3.0 在设计的时候没有考虑向下兼容。 Python
    Python 3 教程
  • Python pip包管理
    一、前言    在Python中, 安装第三方模块是通过 setuptools 这个工具完成的。 Python有两个封装了 setuptools的包管理工具: easy_install  和  pip , 目前官方推荐使用 pip。    
    Python pip包管理
  • ubuntu如何重新编译内核
  • 改善Java代码之慎用java动态编译

目录