关于从文本字符串中提取数字、电话号码、日期和网址的方法:
提取数字:
在 Python 中,使用正则表达式 \d 来匹配数字。 \d 表示匹配一个数字字符(0-9)。如果要匹配连续的数字,可以使用 \d+ 。
import re
def extract_digits(text):
digit_list = re.findall(r'\d+', text)
return [int(digit) for digit in digit_list] # 将提取的数字字符串转换为整数
text = "I have 15 apples and 20 oranges. The price is $30."
print(extract_digits(text))
提取电话号码:
电话号码的格式多种多样,但常见的有以下几种:
1. 以 + 开头,后面跟国家代码和电话号码,例如: +8613812345678
2. 没有 + ,直接是国家代码和电话号码,例如: 8613812345678
3. 国内的手机号码,通常是 11 位数字,以 1 开头,例如: 13812345678
4. 固定电话号码,可能有区号,例如: 010-12345678 或 021 12345678
以下是一个相对复杂的电话号码提取函数示例:
import re
def extract_phone_numbers(text):
patterns = [
r'\+\d{1,3}\d{10}', # 以 + 开头,后面是国家代码和 10 位电话号码
r'\d{11}', # 11 位手机号码
r'\d{3}-\d{7,8}', # 区号 3 位,号码 7 到 8 位
r'\d{4}-\d{7}', # 区号 4 位,号码 7 位
r'\d{3}\s\d{7,8}', # 区号 3 位,空格分隔,号码 7 到 8 位
r'\d{4}\s\d{7}' # 区号 4 位,空格分隔,号码 7 位
]
phone_numbers = []
for pattern in patterns:
found_numbers = re.findall(pattern, text)
phone_numbers.extend(found_numbers)
return phone_numbers
text = "My phone number is +8613812345678. Another one is 010-12345678 and 15912345678"
print(extract_phone_numbers(text))
提取日期:
日期的格式非常多,常见的有 YYYY-MM-DD 、 MM/DD/YYYY 、 DD-MM-YYYY 等。以下是一个能够处理多种常见日期格式的示例:
from datetime import datetime
import re
def extract_dates(text):
date_patterns = [
r'\d{4}-\d{2}-\d{2}', # YYYY-MM-DD
r'\d{2}/\d{2}/\d{4}', # MM/DD/YYYY
r'\d{2}-\d{2}-\d{4}', # DD-MM-YYYY
]
dates = []
for pattern in date_patterns:
found_dates = re.findall(pattern, text)
for date_str in found_dates:
try:
date = datetime.strptime(date_str, pattern)
dates.append(date)
except ValueError:
pass
return dates
text = "The event is on 2024-07-07 and another one on 07/07/2024 and 07-07-2024"
print(extract_dates(text))
提取网址:
网址的格式通常以 http 或 https 开头,后面跟着域名和路径等。以下是一个提取网址的示例:
import re
def extract_urls(text):
url_pattern = r'https?://(?:[-\w.]|(?:%[\da-fA-F]{2}))+'
return re.findall(url_pattern, text)
text = "Check out these websites: https://www.example.com/page?param=value and http://another-site.org"
print(extract_urls(text))