如何使用正则提取阿拉伯语字符串中的有效日期(格式dd-month-yyyy)
实现方案
核心思路
该阿拉伯语日期提取需求可通过两步正则匹配实现:
- 第一步先过滤字符串内所有HTML标签,得到纯文本日期内容
- 第二步用带捕获组的正则提取目标字段,自动过滤星期、斜杠后的冗余月份内容
正则说明
核心匹配正则为:\b(\d{1,2})\s+([^\/]+)\/.*?\s+(\d{4})\b
各部分作用:
(\d{1,2}):捕获1~2位的日期数字(对应dd字段)\s+:匹配日期和月份之间的空白字符([^\/]+):捕获斜杠之前的所有内容(对应需要保留的阿拉伯语月份名)\/.*?\s+:匹配斜杠及后续冗余月份内容,直到遇到年份前的空白字符(\d{4}):捕获4位年份数字(对应yyyy字段)
可直接运行的Python示例代码
import re def extract_arabic_date(raw_html): # 移除所有HTML标签 pure_text = re.sub(r'<[^>]+>', '', raw_html) # 匹配日期捕获组 date_match = re.search(r'\b(\d{1,2})\s+([^\/]+)\/.*?\s+(\d{4})\b', pure_text) if date_match: day, month, year = date_match.groups() # 拼接为要求的dd-month-yyyy格式 return f"{day}-{month.strip()}-{year}" # 匹配失败返回空值,可根据需求调整 return None # 测试示例 test_samples = [ '<p>السبت 18 سبتمبر/أيلول 2021</p>', '<p class="schedule__date sub-heading">الثلاثاء 21 سبتمبر/أيلول 2021</p>', '<p class="schedule__date sub-heading">الأربعاء 22 سبتمبر/أيلول 2021</p>' ] for sample in test_samples: print(extract_arabic_date(sample))
输出结果
18-سبتمبر-2021 21-سبتمبر-2021 22-سبتمبر-2021
扩展说明
如果需要把阿拉伯语月份转换为英文/中文月份,只需要额外添加月份映射表即可,示例:
month_mapping = { "سبتمبر": "September", # 按需补全其余11个月份的对应关系 } # 拼接格式时替换即可 return f"{day}-{month_mapping.get(month.strip(), month.strip())}-{year}"
内容的提问来源于stack exchange,提问作者Mohamad A Sallal
相关产品推荐
相关产品推荐

