介绍:

正则表达式用于识别模式(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'Cowkwe', 'Cookie').group()'Cookie'

· W - 大写w。匹配不属于 w的任何字符(小写w)。

re.search(r'CWke', 'C@ke').group()'C@ke'

· s - 小写字母s。匹配单个空格字符,例如:空格,换行符,制表符,返回值。

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

· S - 大写字母s。匹配不属于 s(小写s)的任何字符。

re.search(r'CookSe', 'Cookie').group()'Cookie'

· - 小写字母t。匹配标签。

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

· - 小写字母n。匹配换行符。

· - 小写字母r。比赛归来。

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

re.search(r'cddkie', '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 5re.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'

· -反斜杠。如果反斜杠后面的字符是公认的转义字符,则采用该术语的特殊含义。例如,被视为换行符。但是,如果后面的字符不是可识别的转义字符,则将象任何其他字符一样对待并通过。

让我们看几个例子:

# This checks for '' in the string instead of '' due to the '' used re.search(r'Backstail', 'Backstail').group()'Backstail'# This treats 's' as an escape character because it lacks '' at the start of 's're.search(r'Backstail', '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 sequencere.search(r'Ca*o*kie', 'Caokie').group()'Caokie'

· ? -检查其左边是否为零或一个字符。

# Checks for exactly zero or one occurrence of a or o or both in the given sequencere.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'

TITLE

're.match(r'<.>', heading).group()'

TITLE

'

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

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

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

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

heading = r'

TITLE

're.match(r'<.>', heading).group()'

'

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 matchaddresses = re.findall(r'[w.-]+@[w.-]+', email_address)for address in addresses:  print(address)support@datacamp.comxyz@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 requeststhe_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 .****

c++正则表达式_Python正则表达式教程-常用文本处理技巧相关推荐

  1. python正则表达式_Python正则表达式简记和re库!

    正则表达式是定义搜索模式的字符序列.通常这种模式被字符串搜索算法用于字符串上的"查找"或"查找和替换"操作,或者用于输入验证. 1. 正则表达式的语法 . 表示 ...

  2. 菜鸟教程python正则表达式_Python正则表达式常用函数菜鸟教程

    这篇文章主要为大家详细介绍了Python正则表达式常用函数菜鸟教程,具有一定的参考价值,可以用来参考一下. 对python这个高级语言感兴趣的小伙伴,下面一起跟随512笔记的小编两巴掌来看看吧! Py ...

  3. 菜鸟教程python正则表达式_python 正则表达式详解

    python 正则表达式详解 1. 正则表达式模式 模式描述 ^ 匹配字符串的开头 $ 匹配字符串的末尾. . 匹配任意字符,除了换行符,当re.DOTALL标记被指定时,则可以匹配包括换行符的任意字 ...

  4. 菜鸟教程python正则表达式_Python 正则表达式

    Python 正则表达式 正则表达式是搜索模式形成的字符序列. 它可用于检查字符串是否与某种字符匹配的搜索模式. RegEx模块 Python有一个内置的包re,可以用来处理正则表达式. 导入re模块 ...

  5. python find 正则表达式_python正则表达式

    一:简介 正则表达式是处理字符串的强大工具,拥有独特的语法和独立的处理引擎. 我们在大文本中匹配字符串时,有些情况用str自带的函数(比如find, in)可能可以完成,有些情况会稍稍复杂一些(比如说 ...

  6. python程序开发正则表达式_python正则表达式的使用(实验代码)

    正则表达式是一个特殊的字符序列,它能帮助你方便的检查一个字符串是否与某种模式匹配. Python 自1.5版本起增加了re 模块,它提供 Perl 风格的正则表达式模式. re 模块使 Python ...

  7. python标准日期正则表达式_Python 正则表达式验证传统日期

    Pure regular exprssion (?x)(?: (?#dd/mm) (3[0-1]|[12][0-9]|0?[0-9])/(1[0-2]|0?[1-9]) | (?#mm/dd) (1[ ...

  8. python网址正则表达式_python正则表达式抓取图片地址为什么要这样写?

    目标导向: 题主的问题是为什么,我的回答是:看效果: 完整代码: #!/usr/bin/env python import re, requests SAVE_DIR_PATH = 'E:/zhihu ...

  9. python网址正则表达式_python正则表达式验证ipv6地址

    下面是编程之家 jb51.cc 通过网络收集整理的代码片段. 编程之家小编现在分享给大家,也给大家做个参考. def ipv6_addr(addr): ''' Returns True if the ...

最新文章

  1. 线程中应该注意的问题
  2. 如何开始你的CTF比赛之旅
  3. cleanmymac 4.2_15北师大版八年级物理上册4.2节乐音微课视频|知识点|练习
  4. 使用WebRTC开发Android Messenger:第1部分
  5. 圆形卡尺测量后创建模板
  6. Zookeeper集群安装Version3.5.1
  7. Java与C语言混合编程
  8. java vc vb 项目结构
  9. JavaScript 实现Map效果
  10. select count(*) 和 select count(1) 以及 select count(column) 的区别
  11. c语言实验 正弦csdn,实验2 正弦波振荡器(LC振荡器和晶体振荡器)
  12. java泛型为类类型_Java泛型:仅定义为返回类型的通用类型
  13. 图形验证码文字识别——pytesseract
  14. html弹窗确认取消公告代码,javascript实现确定和取消提示框效果
  15. 雅虎搜索架构_雅虎! 想要推动您的网站搜索
  16. 从Solidworks模型到UG制工程图
  17. ES7210四通道ADC芯片电路PCB-LAYOUT注意
  18. Python对象的浅拷贝与深拷贝
  19. win10连不上网,显示电脑标识加一个红叉叉,网络连接只有以太网?
  20. 国产台式电子计算机,国产十大台式电子管名机6——东方红82-Y型收音机(一)

热门文章

  1. SAP Data Intelligence上的Python Operator
  2. SAP CRM WebClient UI和Hybris Commerce里的跨组件跳转
  3. sublime text的dockerfile语法高亮插件
  4. 将SpringBoot应用Docker化并部署到SAP云平台
  5. 阮一峰react demo代码研究的学习笔记 - babel
  6. SAP APF tile点击之后,都发生了哪些事情
  7. 避免CRM_IB 013 error message
  8. html native code is rendered from xml configuration
  9. 已知ABAP tcode,需要查找assign了该tcode的PFCG role
  10. Difference between a normal BSP application and a WebClient UI component