### `re.findall` 使用方法、示例与解析
`re.findall` 是 Python 中正则表达式模块 `re` 的一个重要函数,用于从字符串中提取所有匹配指定模式的子串,并以列表的形式返回结果。如果未找到任何匹配项,则返回一个空列表。
#### 函数定义
`re.findall(pattern, string, flags=0)`
- 参数 `pattern`:表示正则表达式的模式。
- 参数 `string`:表示需要搜索的目标字符串。
- 参数 `flags`(可选):用于控制正则表达式的匹配行为,例如忽略大小写 `re.IGNORECASE` 或多行匹配 `re.MULTILINE`。
#### 返回值
返回一个包含所有非重叠匹配项的列表。如果正则表达式中包含分组(括号),则返回的是匹配分组的内容;如果没有分组,则返回整个匹配项。
---
#### 示例代码
以下是一些使用 `re.findall` 的具体示例:
```python
import re
# 示例 1:查找字符串中的所有数字
text = "There are 123 apples and 456 oranges."
result = re.findall(r'\d+', text)
print(result) # 输出: ['123', '456']
# 示例 2:查找字符串中的所有单词
text = "Hello, world! This is a test."
result = re.findall(r'\w+', text)
print(result) # 输出: ['Hello', 'world', 'This', 'is', 'a', 'test']
# 示例 3:带有分组的正则表达式
text = "The price is $100 and the discount is 20%"
result = re.findall(r'(\d+)', text)
print(result) # 输出: ['100', '20']
# 示例 4:忽略大小写的匹配
text = "Python, python, PYTHON"
result = re.findall(r'python', text, re.IGNORECASE)
print(result) # 输出: ['Python', 'python', 'PYTHON']
```
---
#### 示例解析
1. **示例 1**:`\d+` 表示匹配一个或多个连续的数字字符。因此,`re.findall` 提取了字符串中的所有数字并返回为列表。
2. **示例 2**:`\w+` 表示匹配一个或多个连续的字母、数字或下划线字符。此正则表达式用于提取字符串中的所有单词。
3. **示例 3**:在正则表达式中使用括号 `( )` 定义了一个分组,`re.findall` 只返回分组中的内容,而不是整个匹配项。
4. **示例 4**:通过传递 `re.IGNORECASE` 标志,`re.findall` 能够忽略大小写进行匹配。
---
#### 注意事项
1. 如果正则表达式中包含多个分组,则返回的是元组列表,每个元组对应一次匹配中的所有分组内容。
2. `re.findall` 不会返回重叠的匹配项。如果需要处理重叠匹配,可以考虑使用其他方法,如 `re.finditer`。
---