Python 从自然语言字符串中提取日期
我使用python在字符串中查找日期,如:Python 从自然语言字符串中提取日期,python,regex,Python,Regex,我使用python在字符串中查找日期,如: string01='los mantenimientos acontecieron en los dias 3,06,8 ,9, 15 y 29 de diciembre de 2018.Por cada mantenimiento fué cobrado $1,300.00 códigos de mantenimiento: (3)A34,(2)C54,(1)D65' “管理会议于2018年12月3日、6日、8日、9日、15日和29日举行” 我首先
string01='los mantenimientos acontecieron en los dias 3,06,8 ,9, 15 y 29 de diciembre de 2018.Por cada mantenimiento fué cobrado $1,300.00 códigos de mantenimiento: (3)A34,(2)C54,(1)D65'
“管理会议于2018年12月3日、6日、8日、9日、15日和29日举行”
我首先尝试使用regex查找和拆分日期,而不是货币,然后将它们转换为预期结果
预期结果:['3/12/2018'、'06/12/2018'、'08/12/2018'、'09/12/2018'、'15/12/2018'、'29/12/2018']
“管理会议发生在2018年6月2日、4日、5日、8日、9日、10日、11日、14日、15日、22日、24日和27日”
预期结果:['2018年6月2日','2018年6月4日','2018年6月5日','2018年6月8日','2018年6月9日','2018年6月10日','2018年6月11日','2018年6月14日','2018年6月15日','2018年6月22日','2018年6月24日','2018年6月27日]
到目前为止,我尝试过:
dias=re.compile(r"((\s?[0-3]?[0-9]\s?\,?\s?){1,9}[0-3][0-9]|\sy\s[0-3][0-9]\sde\s(?:diciembre|junio)\sde\s[2][0][0-2][0-9])")
dias_found=re.findall(dias,string01)
但我得到了元组和重复值:
[(' 3,06,8,9, 15', '9, '), (' y 29 de diciembre de 2018', '')]
应该是['3'、'06'、'8'、'9'、'15'、'29 de diciembre de 2018']
任何帮助都将不胜感激
提前感谢。您可以将re模块与字符串操作结合使用,轻松提取日期
导入请求
进口稀土
导入json
如果uuuu name uuuuu==\uuuuuuuu main\uuuuuuuu:
文本=[
“在2018年第3、06、8、9、15和29届世界杯上,请点击c”,
n en:2,04,05,8,9,10,11,14,15,22,24,y 27 de junio de 2018.Valor de',
]
选择从日期开始(如文本)到年底
模式=r'\s*\d+[\sy\,]*+[\d\s]+20\d{2}'
月份名称=['diciembre','junio']添加其他
month_pattern=re.compilef'{|.joinmonth_names}',flags=re.IGNORECASE
所有日期=[]
对于文本中的项目:
匹配=重新搜索模式,项目
如果不匹配:
持续
日期\地区:str=match.group1
查找年份
year=重新搜索'20\d{2}',date\u region.group1
查找月份
月匹配=重新搜索月模式,日期区域
月份=月份\u匹配组1
一个月后搬走所有东西
日期\地区=日期\地区[:月\匹配.开始]
找到所有数字,我们假设它们代表一个月中的某一天
天=re.findall'\d+',日期\地区
查找日期=[f'{d}/{month}/{year}'对于d,以天为单位]
所有\u日期。找到\u日期
打印所有日期
我不知道葡萄牙语的月份名称?编辑:这是西班牙语,但用数字替换这些数字是一项微不足道的任务。
输出:
您可以将re模块与字符串操作结合使用,轻松提取日期
导入请求
进口稀土
导入json
如果uuuu name uuuuu==\uuuuuuuu main\uuuuuuuu:
文本=[
“在2018年第3、06、8、9、15和29届世界杯上,请点击c”,
n en:2,04,05,8,9,10,11,14,15,22,24,y 27 de junio de 2018.Valor de',
]
选择从日期开始(如文本)到年底
模式=r'\s*\d+[\sy\,]*+[\d\s]+20\d{2}'
月份名称=['diciembre','junio']添加其他
month_pattern=re.compilef'{|.joinmonth_names}',flags=re.IGNORECASE
所有日期=[]
对于文本中的项目:
匹配=重新搜索模式,项目
如果不匹配:
持续
日期\地区:str=match.group1
查找年份
year=重新搜索'20\d{2}',date\u region.group1
查找月份
月匹配=重新搜索月模式,日期区域
月份=月份\u匹配组1
一个月后搬走所有东西
日期\地区=日期\地区[:月\匹配.开始]
找到所有数字,我们假设它们代表一个月中的某一天
天=re.findall'\d+',日期\地区
查找日期=[f'{d}/{month}/{year}'对于d,以天为单位]
所有\u日期。找到\u日期
打印所有日期
我不知道葡萄牙语的月份名称?编辑:这是西班牙语,但用数字替换这些数字是一项微不足道的任务。
输出:
老实说,试图解析人类可读的语言充满了困难,因此依赖它来处理任何关键的事情可能是个坏主意——最好让您的ops团队以iCal格式或其他编程方式来共享他们的日程安排;这样,如果他们下次用的措辞稍有不同,而且读错了,那是他们的问题,而不是你的问题。@abdusco非常感谢,实际上是西班牙语,试图解析人类可读的语言充满了困难,依赖它处理任何关键的事情可能是个坏主意——最好让您的ops团队以iCal格式或其他编程方式解析的方式共享他们的日程安排;这样,如果他们下次使用的措辞稍有不同,而且读错了,那是他们的问题,不是你的问题。@abdusco非常感谢,实际上是西班牙语
[(' 3,06,8,9, 15', '9, '), (' y 29 de diciembre de 2018', '')]
[['3/diciembre/2018',
'06/diciembre/2018',
'8/diciembre/2018',
'9/diciembre/2018',
'15/diciembre/2018',
'29/diciembre/2018'],
['2/junio/2018',
'04/junio/2018',
'05/junio/2018',
'8/junio/2018',
'9/junio/2018',
'10/junio/2018',
'11/junio/2018',
'14/junio/2018',
'15/junio/2018',
'22/junio/2018',
'24/junio/2018',
'27/junio/2018']]