Python RegEx:re.match()、re.search()、re.findall() 示例

正则表达式 Python?

A 正则表达式 (RE) 在编程语言中,搜索模式是一种特殊的文本字符串,用于描述搜索模式。它对于从文本(例如代码、文件、日志、电子表格甚至文档)中提取信息非常有用。

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

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

  • 文本匹配
  • 重复
  • 分枝
  • 图案构图等

正则表达式或 RegEx Python 表示为 RE(RE、正则表达式或正则表达式模式)通过以下方式导入 重新模块. Python 通过库支持正则表达式。RegEx 中的 Python 支持各种各样的事情,比如 修饰符、标识符和空格字符.

标识符 修饰符 空白字符 需要逃离
\d= 任意数字(一位数字) \d 代表数字。例如:\d{1,5} 它将声明 1,5 之间的数字,如 424,444,545 等。 \n = 新行 . + * ? [] $ ^ () {} | \
\D= 除了数字之外的任何内容(非数字) + = 匹配 1 个或多个 \s= 空格
\s = 空格
(制表符、空格、换行符等)
? = 匹配 0 或 1 \t =制表符
\S= 除空格外的任何字符 * = 0 或更多 \e = 转义
\w = 字母(匹配字母数字字符,包括“_”) $ 匹配字符串的结尾 \r = 回车
\W = 除字母以外的任何字符(匹配除“_”之外的非字母数字字符) ^ 匹配字符串的开头 \f= 换页符
. = 除字母(句点)以外的任何字符 | 匹配或 x/y ------
\b = 除换行符之外的任意字符 [] = 范围或“方差” ------
\. {x} = 前面代码的数量 ------

正则表达式(RE)语法

import re
  • 包含“re”模块 Python 主要用于字符串搜索和操作
  • 也经常用于网页“刮ing”(从网站提取大量数据)

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

w+ 和 ^ 表达式的示例

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

在这里我们将看到 Python RegEx 示例,说明如何在代码中使用 w+ 和 ^ 表达式。我们在 Python,但暂时我们只关注 \w+ 和 \^ 表达式。

例如,对于我们的字符串“guru99, education is fun”,如果我们使用 w+ 和 ^ 执行代码,它将输出“guru99”。

w+ 和 ^ 表达式的示例

import re
xx = "guru99,education is fun"
r1 = re.findall(r"^\w+",xx)
print(r1)

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

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

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

要理解此 RegEx 如何 Python 我们从一个简单的开始 Python RegEx 拆分函数示例。在示例中,我们使用“re.split”函数拆分每个单词,同时使用表达式 \s 来分别解析字符串中的每个单词。

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

当你执行此代码时,它将给你输出 ['we', 'are', 'splitting', 'the', 'words']。

现在,让我们看看如果从 s 中删除“\”,会发生什么情况。输出中没有“s”字母,这是因为我们已从字符串中删除了“\”,并且它将“s”评估为常规字符,因此在字符串中找到“s”时会拆分单词。

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

同样,还有一系列其他的 Python 正则表达式可以以多种方式使用 Python 例如 \d、\D、$、\.、\b 等等。

以下是完整的代码

import re
xx = "guru99,education is fun"
r1 = re.findall(r"^\w+", xx)
print((re.split(r'\s','we are splitting the words')))
print((re.split(r's','split the words')))

接下来,我们将看到正则表达式中使用的方法类型 Python.

使用正则表达式方法

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

  • 重新匹配()
  • 研究()
  • 重新findall()

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

重新匹配()

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

例如,考虑以下代码 Python re.match() 函数。表达式“w+”和“\W”将匹配以字母“g”开头的单词,此后,不以“g”开头的任何单词都无法识别。为了检查列表或字符串中每个元素的匹配情况,我们在此运行 forloop Python re.match() 示例。

重新匹配()

re.search():在文本中查找模式

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

如何使用search()?

为了使用 search() 函数,您需要导入 Python 重新模块,然后执行代码。 Python re.search() 函数从主字符串中获取“模式”和“文本”进行扫描

使用搜索()

例如,我们在文本字符串“Software 测试 很有趣”。对于“软件测试”,我们找到了匹配项,因此它返回输出 Python re.search() 示例为“找到匹配项”,而对于单词“guru99”,我们在字符串中找不到,因此它返回输出“无匹配”。

重新findall()

找到所有() 模块用于搜索与给定模式匹配的“所有”实例。相比之下,search() 模块将仅返回与指定模式匹配的第一个实例。findall() 将遍历文件的所有行,并在一个步骤中返回所有不重叠的模式匹配项。

如何在 Python?

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

使用 re.findall() Python

以下是 re.findall() 示例的完整代码

import re

list = ["guru99 get", "guru99 give", "guru Selenium"]
for element in list:
    z = re.match("(g\w+)\W(g\w+)", element)
if z:
    print((z.groups()))
    
patterns = ['software testing', 'guru99']
text = 'software testing is fun?'
for pattern in patterns:
    print('Looking for "%s" in "%s" ->' % (pattern, text), end=' ')
    if re.search(pattern, text):
        print('found a match!')
else:
    print('no match')
abc = 'guru99@google.com, careerguru99@hotmail.com, users@yahoomail.com'
emails = re.findall(r'[\w\.-]+@[\w\.-]+', abc)
for email in emails:
    print(email)

Python 旗

更多来自Google的 Python Regex 方法和 Regex 函数采用称为 Flags 的可选参数。此标志可以修改给定 Python 正则表达式模式。为了理解这些,我们将看到这些标志的一两个示例。

用于 Python 包括

正则表达式标志的语法 此标志的作用是什么
[重新.M] 使开始/结束考虑每一行
[回复我] 忽略大小写
[回复] 制作 [ 。 ]
[回复.U] 使 { \w,\W,\b,\B} 遵循 Unicode 规则
[回复.L] 使 {\w,\W,\b,\B} 遵循语言环境
[回复.X] 允许在正则表达式中进行评论

re.M 或多行标志的示例

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

re.M 或多行标志的示例

这是代码

import re
xx = """guru99 
careerguru99	
selenium"""
k1 = re.findall(r"^\w", xx)
k2 = re.findall(r"^\w", xx, re.MULTILINE)
print(k1)
print(k2)
  • 我们为字符串“guru99….careerguru99….selenium”声明了变量xx
  • 运行代码时不使用多行标志,它只会输出以下行中的“g”
  • 使用标志“multiline”运行代码,当你打印“k2”时,它会输出“g”、“c”和“s”
  • 因此,我们可以在上面的例子中看到添加多行之后和之前的区别。

同样,您也可以使用其他 Python 标志如 re.U (Unicode)、re.L (遵循区域设置)、re.X (允许评论) 等。

Python 2示例

以上代码是 Python 3 个例子,如果你想跑步 Python 2 请考虑以下代码。

# Example of w+ and ^ Expression
import re
xx = "guru99,education is fun"
r1 = re.findall(r"^\w+",xx)
print r1

# Example of \s expression in re.split function
import re
xx = "guru99,education is fun"
r1 = re.findall(r"^\w+", xx)
print (re.split(r'\s','we are splitting the words'))
print (re.split(r's','split the words'))

# Using re.findall for text
import re

list = ["guru99 get", "guru99 give", "guru Selenium"]
for element in list:
    z = re.match("(g\w+)\W(g\w+)", element)
if z:
    print(z.groups())
    
patterns = ['software testing', 'guru99']
text = 'software testing is fun?'
for pattern in patterns:
    print 'Looking for "%s" in "%s" ->' % (pattern, text),
    if re.search(pattern, text):
        print 'found a match!'
else:
    print 'no match'
abc = 'guru99@google.com, careerguru99@hotmail.com, users@yahoomail.com'
emails = re.findall(r'[\w\.-]+@[\w\.-]+', abc)
for email in emails:
    print email

# Example of re.M or Multiline Flags
import re
xx = """guru99 
careerguru99	
selenium"""
k1 = re.findall(r"^\w", xx)
k2 = re.findall(r"^\w", xx, re.MULTILINE)
print k1
print k2

测试你的 Python 知识库

1. 哪种方法可用于查找字符串中某个模式的所有出现位置?

  • 研究()
  • 重新匹配()
  • 重新findall()
  • 重新分割()
re.findall() 用于查找字符串中某个模式的所有出现的位置。

2. \d 字符类在正则表达式中代表什么?

  • 任意数字(0-9)
  • 任何非数字字符
  • 任何空白字符
  • 任意字母或数字
\d 代表任意数字(0-9)。

3. 你会使用哪个函数来根据空格分割字符串?

  • re.split(r'\s',字符串)
  • re.findall(r'\w+',字符串)
  • re.match(r'\s+',字符串)
  • re.split(r'\w+',字符串)
re.split(r'\s', string) 使用 \s 表达式根据空格拆分字符串。

4. re.match() 和 re.search() 的主要区别是什么?

  • re.match() 在字符串的开头寻找模式,而 re.search() 在字符串中的任何位置寻找模式。
  • re.match() 返回所有匹配项,而 re.search() 返回第一个匹配项。
  • re.search() 比 re.match() 更快。
  • 两个函数的行为方式相同。
re.match() 在字符串的开头寻找模式,而 re.search() 在字符串中的任何位置寻找模式。

总结

正则表达式 编程语言 是用于描述搜索模式的特殊文本字符串。它包括数字和标点符号以及所有特殊字符,如 $#@!% 等。表达式可以包括文字

  • 文本匹配
  • 重复
  • 分枝
  • 图案构图等

In Python,正则表达式表示为 RE(RE、正则表达式或正则表达式模式)通过以下方式嵌入 Python 重新模块。

  • 包含“re”模块 Python 主要用于字符串搜索和操作
  • 也经常用于网页“抓取”(从网站提取大量数据)
  • 正则表达式方法包括 re.match(),re.search()& re.findall()
  • 其他 Python RegEx 替换方法是 sub() 和 subn(),用于替换匹配的字符串
  • Python 旗 更多来自Google的 Python Regex 方法和 Regex 函数采用名为 Flags 的可选参数
  • 此标志可以修改给定正则表达式模式的含义
  • 套装 Python Regex 方法中使用的标志是 re.M、re.I、re.S 等。