Python 正则提取数字
引言
正则表达式(Regular Expression)是一种用来匹配字符串的强大工具。在文本处理和数据分析中,我们经常需要对字符串进行数字提取,例如从一段文字中提取出电话号码、邮政编码等数字。Python 的 re
模块提供了一系列函数和方法,可以方便地实现对数字的提取。
本文将介绍如何使用 Python 正则表达式提取数字。我们将从基础的数字匹配开始,逐步介绍如何处理不同形式的数字,并给出示例代码和运行结果。
1. 匹配单个数字
首先,我们来了解如何匹配一个单独的数字。在正则表达式中,数字可以用 \d
表示。以下是一个简单的示例代码:
import re
text = "I have 3 apples in my basket."
result = re.findall(r'\d', text)
print(result)
以上代码中,我们使用 re.findall
函数来查找字符串中的所有匹配。正则表达式 r'\d'
中的 \d
表示匹配任意一个数字。运行上述代码,输出为 ['3']
,即找到了字符串中的数字 3。
2. 匹配多位数字
如果我们需要匹配多位数字,可以使用 \d+
的形式。这里的 +
表示匹配一个或多个前面的字符。以下是一个示例代码:
import re
text = "I have 345 apples in my basket."
result = re.findall(r'\d+', text)
print(result)
运行上述代码,输出为 ['345']
,即找到了字符串中的数字 345。
3. 提取多个数字
在实际的应用中,我们通常需要从一段文字中提取出所有的数字。可以使用 re.findall
函数结合正则表达式来实现这一目标。以下是一个示例代码:
import re
text = "I have 3 apples and 5 oranges, totaling 8 fruits."
result = re.findall(r'\d+', text)
print(result)
运行上述代码,输出为 ['3', '5', '8']
,即找到了字符串中的所有数字。
4. 去除整数部分和小数部分
有时候,我们只需要提取数字的整数部分或小数部分。可以使用 re.findall
结合正则表达式来实现这一目标。以下是一个示例代码:
import re
text = "The price is $12.99."
integer_part = re.findall(r'\d+', text)
decimal_part = re.findall(r'\.\d+', text)
print("整数部分:", integer_part)
print("小数部分:", decimal_part)
运行上述代码,输出为:
整数部分: ['12']
小数部分: ['.99']
通过与 \d+
结合,正则表达式 r'\.\d+'
匹配小数部分。需要注意的是,\
是转义字符,所以在正则表达式中需要写成 r'\.\d+'
。
5. 忽略小数点前的数字
有时候,我们可能只想提取小数部分,而忽略小数点前的数字。可以使用 re.findall
结合正则表达式来实现这一目标。以下是一个示例代码:
import re
text = "The price is $12.99."
decimal_part = re.findall(r'\.\d+', text)
print(decimal_part)
运行上述代码,输出为 ['.99']
,即找到了字符串中的小数部分。
6. 提取负数
正则表达式也可以用来提取负数。我们可以使用 -?
来匹配可能存在的负号。以下是一个示例代码:
import re
text = "The temperature is -3.5 degrees Celsius."
result = re.findall(r'-?\d+\.?\d*', text)
print(result)
运行上述代码,输出为 ['-3.5']
,即找到了字符串中的负数。
7. 忽略小数点
有时候,我们可能只想提取整数部分,而忽略小数点部分。可以使用 re.findall
结合正则表达式来实现这一目标。以下是一个示例代码:
import re
text = "The temperature is -3.5 degrees Celsius."
integer_part = re.findall(r'-?\d+', text)
print(integer_part)
运行上述代码,输出为 ['-3', '5']
,即找到了字符串中的整数部分。
8. 忽略正负号
如果我们想忽略正负号,只提取数字本身,可以使用 re.findall
结合正则表达式来实现这一目标。以下是一个示例代码:
import re
text = "The temperature is -3.5 degrees Celsius."
result = re.findall(r'-?\d+\.?\d*', text)
numbers = [float(x) for x in result]
print(numbers)
运行上述代码,输出为 [-3.5]
,即找到了字符串中的数字,并将其转换为浮点数。
9. 结论
通过使用 Python 正则表达式,我们可以方便地提取字符串中的数字。通过灵活运用不同的正则表达式,可以满足各种需要。在实际应用中,我们可以根据需求使用合适的正则表达式来提取、处理和分析数据。