Menu Close

Python 正则表达式:match(),search(),findall()

什么是Python 正则表达式?

正则表达式是用来描述搜索模式的特殊文本字符串。这对于从文本(例如代码,文件,日志,电子表格甚至文档)中提取信息非常有用。

使用Python正则表达式时,首先要认识到的是,所有内容本质上都是一个字符,并且我们正在编写模式以匹配特定的字符序列(也称为字符串)。ASCII或拉丁字母是键盘上的字母,Unicode用于匹配其他文本。它包括数字和标点符号以及所有特殊字符,例如$#@!%等。

在此Python RegEx教程中,我们将学习-

  • 语法
  • w +和^
  • re.split函数中\s
  • 使用正则表达式方法
  • re.match
  • re.search
  • re.findall
  • Python Flag
  • 单行和多行模式

例如,Python正则表达式可以告诉程序从字符串中搜索特定文本,然后相应地打印出结果。表达式可以包括

  • 文本匹配
  • 重复
  • 分支
  • 构图

Python中的正则表达式或RegEx表示为RE(通过re模块导入RE,regexes或regex模式)。Python通过库支持正则表达式。Python中的RegEx支持各种功能

正则表达式基础规则:

一、边界符
^ 匹配行首/字符串的开始
$ 匹配行尾/字符串的结尾
\b 匹配单词的边界
二、替代符
. 除换行符以外的任意字符
三、[]号
[]只要匹配到其中1个即可,里面的内容可以用-表示范围
[]里面加^表示取反
四、量词符
* 零次或多次
+ 1次或多次
? 0次或1次
{n} 重复n次
{n,} 重复n次或更多次
{n,m} 重复n到m次
a|b a或b
五、预定义类
\d 匹配0-9之间任一数字,相当于【0-9】
\D 上述除外,相当于【^0-9】
\w 匹配任一数字或字母或下划线_,相当于【0-9a-zA-Z_】
\W 上述除外,相当于【^0-9a-zA-Z】
\s 匹配空格(包括换行符、空格、制表符等等)
\S 匹配非空格字符
\b 匹配单词的开头和结尾的空格

正则表达式(RE)语法

import re
r1 = re.findall(r"^\w+","中华民族,伟大复兴")
print(r1)

我们将通过使用表达式(w +)和(^)进行此简单练习,开始表达式教程。

w +和^表达式的示例

  • “ ^”:此表达式匹配字符串的开头
  • “ w+ ”:此表达式与字符串中的字母数字字符匹配

在这里,我们将看到一个Python RegEx示例,说明如何在代码中使用w +和^表达式。

%title插图%num

import re
r1 = re.findall(r"^\w+","中华民族,伟大复兴")
print(r1)

如果从w +中删除+ 号,输出将发生变化,并且只会给出第一个字母的第一个字符,即[中]

re.split函数中\ s表达式的示例

  • “ s”:该表达式用于在字符串中创建空格

为了了解此RegEx在Python中的工作方式,我们从一个简单的分割函数Python RegEx示例开始。在该示例中,我们使用“ re.split”功能拆分了每个单词,同时使用了表达式\ s,该表达式允许分别解析字符串中的每个单词。

import re

print(re.split(r'\s','we are family'))

output:

['we', 'are', 'family']

现在,让我们看看如果从s中删除“ \”会发生什么。输出中没有’s’字母,这是因为我们已经从字符串中删除了’\’,并且它将“ s”视为常规字符,因此只要在字符串中找到“ s”的地方就将单词分开。


接下来,我们将看到在Python中与正则表达式一起使用的方法的类型。

使用正则表达式方法

“ re”包提供了几种对输入字符串实际执行查询的方法。我们将在Python中看到re的方法:

  • re.match
  • re.search
  • re.findall

注意:基于正则表达式,Python提供了两种不同的基本操作。match方法仅在字符串的开头检查匹配项,而search在字符串的任何位置检查匹配项。

re.match()

Python中re的re.match()函数将搜索正则表达式模式并返回第一个匹配项。Python RegEx Match方法仅在字符串的开头检查匹配项。因此,如果在第一行找到匹配项,则返回匹配对象。但是,如果在其他行中找到匹配项,则Python RegEx Match函数将返回null。

观察下面的Python re.match函数代码。“ w +”和“ \ W”将匹配以字母“ i”开头的单词,示例:

import re

list = ['icf get','icf post','icf pull','icf give',]

for ele in list:
    z = re.match("(i\w+)\W(g\w+)", ele)

    if z:
        print((z.group()))

output:

icf get
icf give

re.search 在文本中查找

语法:

re.search(pattern, string, flags=0)

参数:

  • pattern : 正则中的模式字符串。
  • string : 要被查找替换的原始字符串。
  • flags : 标志位,用于控制正则表达式的匹配方式,如:是否区分大小写,多行匹配等等。

re.search函数将搜索正则表达式模式并返回第一个匹配项。与Python re.match不同,它将检查输入字符串的所有行。找到将返回一个匹配对象;如果未找到模式,则返回“ null”

示例:

p = ['软件测试', 'icfedu']
t = '软件测试真有趣'
for item in p:
    print(" '%s' in '%s' ->" % (item, t), end=" ")
    if re.search(item, t):
        print("找到匹配项")
    else:
        print("没有匹配项")

output:

'软件测试' in '软件测试真有趣' -> 找到匹配项
'icfedu' in '软件测试真有趣' -> 没有匹配项

re.findall

findall用于搜索与给定模式匹配的“所有”事件。相反,search模块将仅返回与指定模式匹配的第一个匹配项。findall将遍历文件的所有行,并在单个步骤中返回模式的所有非重叠匹配。

例如,这里有一个电子邮件地址列表,并且我们希望从列表中取出所有电子邮件地址,我们在Python中使用了re.findall()方法。它将从列表中找到所有电子邮件地址。

示例。

import re
abc = 'icfedu@icfusion.cn, icfedu@163.com, icfedu@icfusions.com'
emails = re.findall(r'[\w]+@[\w\.]+', abc)
for email in emails:
print(email)

Python Flag

许多Python Regex方法和Regex函数采用一个称为Flags的可选参数。该标志可以修改给定的Python Regex模式的含义。为了理解这些,请看下面的示例。

修饰符 描述
re.I 使匹配对大小写不敏感
re.L 做本地化识别(locale-aware)匹配
re.M 多行匹配,影响 ^ 和 $
re.S 使 . 匹配包括换行在内的所有字符
re.U 根据Unicode字符集解析字符。这个标志影响 \w, \W, \b, \B.
re.X 该标志通过给予你更灵活的格式以便你将正则表达式写得更易于理解。

re.M多行标记

在多行中,模式字符[^]与字符串的第一个字符和每行的开头相匹配(紧跟在每个换行符之后)。表达式小“ w”用于用字符标记空格。运行代码时,第一个变量“ k1”仅输出单词guru99的字符“ g”,而添加多行标志时,它将提取字符串中所有元素的第一个字符。

示例:

import re
xx = """icfedu
icfusion
ic知识库"""
k1 = re.findall(r"^\w", xx)
k2 = re.findall(r"^\w", xx, re.MULTILINE)
print(k1)
print(k2)
  • 我们为字符串声明了变量xx。
  • 在不使用标志多行的情况下运行代码,仅输出第一行的“i”
  • 运行带有标志“ multiline”的代码,当您打印“ k2”时,输出每行的首第一个字
  • 因此,在上面的示例中添加多行之后和之前我们可以看到的区别。

python系列教程目录

Posted in Python

发表评论

相关链接