Python re.findall() 方法

2025年7月21日 | 阅读 5 分钟

Python 中的 re.findall() 方法返回字符串中模式的所有匹配项。你可以把它看作是扫描一个句子,寻找一个具有定义好的“格式”的词。re.findall() 通过 正则表达式 (regex) 来查找所有匹配项,从而定义模式。

Python 中 re.findall() 方法的语法

以下是 re.findall() 方法的语法

语法

参数

  • pattern: 你要搜索的正则表达式模式。
  • string: 你要搜索的 字符串
  • flags: (可选) 修改匹配行为 (例如 re.IGNORECASE, re.DOTALL 等)。

返回

  • 一个 列表,其中包含在字符串中按找到顺序排列的所有给定模式的非重叠匹配项。
  • 如果没有匹配项,则返回一个空列表。

Python re.findall() 示例

现在我们将看一些 Python 中 re.findall() 方法的示例。

示例 1:re.findall() 方法的工作原理

此示例演示了 re.findall() 方法在 Python 中的工作方式。

示例

立即执行

输出

Given String: Cats are Clever and Cute
List of Matches: ['Cats', 'Clever', 'Cute']

说明

上面的代码使用 re.findall() 方法查找字符串中所有以“C”开头的单词。正则表达式 \bC\w+ 识别所有以“C”开头的单词。匹配的单词存储在“匹配列表”中,并显示最终结果。

示例 2:re.findall() 的区分大小写

默认情况下,此方法区分大小写。在 re.findall() 中,除了 pattern 和 string 参数外,还可以传递一个额外的参数,即 flag。下面是一个使用 re.IGNORECASE 标志与 re.findall() 方法的示例。

示例

立即执行

输出

Given String: Dogs are friendly. Dogs are loyal.
List of Matches: ['Dogs', 'Dogs']

说明

上面的代码在字符串中搜索单词“dogs”的所有匹配项,通过 re.IGNORECASE 标志忽略大小写差异。re.findall() 函数将返回一个包含所有匹配项的列表,该列表存储在 found_words 中,并打印结果。

示例 3:使用 re.findall() 查找数字

要使用 re.findall() 识别给定字符串中的 数字,可以使用正则表达式 \d+ 来匹配数字。以下是一个示例

示例

立即执行

输出

Given String: There are 3 cats, 12 dogs, and 5 birds.
List of Numbers (in String): ['3', '12', '5']
List of Numbers (in Integer): [3, 12, 5]

说明

代码使用 re.findall() 从文本字符串中提取所有数字。模式 "\d+" 表示一个或多个数字,最终结果是一个字符串形式的数字列表。然后显示这些数字。为了将数字转换为整数数据类型,我们使用了 map() 函数将所有字符串数字转换为整数。

示例 4:使用 re.findall() 匹配日期

我们也可以使用 re.findall() 方法匹配 日期,如下面的示例所示

示例

立即执行

输出

Given String: Important dates: 12/05/2023, 01-06-2024, and 2025.07.15.
List of Numbers (in String): ['12/05/2023', '01-06-2024']

说明

在上面的代码中,模式 \d{2}[/\-\.]\d{2}[/\-\.]\d{4} 匹配 dd/mm/yyyy、dd-mm-yyyy 或 dd.mm.yyyy 格式的日期。\d{2} 匹配两个数字,\d{4} 匹配四个数字。[/\-\.] 匹配 /、- 或 . 作为分隔符。re.findall() 返回文本中的所有匹配日期字符串。

结论

在 Python 中,re.findall() 方法提供了一种有效的方法,通过正则表达式在给定字符串中查找模式的所有匹配项。你可以使用它来匹配给定的单词、数字甚至日期;此外,它还可以通过 re.IGNORECASE 标志提供不区分大小写的匹配。该函数始终输出一个列表,其中包含在原始字符串中匹配的模式的非重叠出现,这是从给定字符串中获取所需模式的一种有效方法。

Python re.findall() 方法选择题

1. re.findall() 函数在 Python 中返回什么?

  1. String
  2. 元组
  3. 列表
  4. 字典
 

答案: c) 列表

原因: re.findall() 始终输出一个列表,其中包含给定字符串中模式的所有非重叠匹配项。


2. 哪个正则表达式模式可以正确匹配给定字符串中的所有数字?

  1. [0-9]*
  2. \w+
  3. \s+
  4. \d+
 

答案: d) \d+

原因: \d+ 匹配给定文本中的一个或多个数字。


3. 以下代码的输出是什么?

  1. ['Cats', 'are', 'Clever', 'Cute']
  2. ['Cats', 'Clever', 'Cute']
  3. ['Cats', 'Cute']
  4. ['Clever']
 

答案: b) ['Cats', 'Clever', 'Cute']

原因: 模式 \bC\w+ 匹配所有以“C”开头的单词。


4. 下面的代码会输出什么?

  1. ['apples']
  2. ['Apples', 'apples']
  3. ['Apples', 'apples', 'APPLES']
  4. []
 

答案: c) ['Apples', 'apples', 'APPLES']

原因: 使用了 re.IGNORECASE 标志的模式 r'apples' 使搜索不区分大小写,因此它匹配了三种形式:“Apples”、“apples”和“APPLES”。re.findall() 方法检索所有非重叠匹配项并放入一个列表中,因此输出为 ['Apples', 'apples', 'APPLES']。


5. 匹配以下格式日期的正确模式是哪个?

  1. \d{2}[\-/\.]\d{2}[\-/\.]\d{4}
  2. \d{4}/\d{2}/\d{2}
  3. \w{2}/\w{2}/\w{4}
  4. [0-9]{2}-[0-9]{2}-[0-9]{4}
 

答案: a) \d{2}[\-/\.]\d{2}[\-/\.]\d{4}

原因: \d{2}[\-/\.]\d{2}[\-/\.]\d{4} 提供了匹配日期的正确模式。