Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/360.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 从自然语言字符串中提取日期_Python_Regex - Fatal编程技术网

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日举行” 我首先

我使用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日举行”

我首先尝试使用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']]