首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何获得正则表达式的最近匹配

如何获得正则表达式的最近匹配
EN

Stack Overflow用户
提问于 2015-12-04 10:01:31
回答 2查看 1.4K关注 0票数 2

我有一个使用正则表达式从文本(format =mm)中提取日期的代码。

备注:文本是在票据图像上使用OCR获取的。因此,预期的日期格式是,但是它可以是任何随机文本,因为它是使用OCR获得的。

代码语言:javascript
复制
import re
date_reg_exp = re.compile('\d{2}[-/.]\d{2}[-/.]\d{4}') #works for mm-dd-yyyy
matches_list=date_reg_exp.findall(test_str)
for match in matches_list2:
  print match

如果我有一个字符串'This is a text extracted from OCR 09-11-2015',上面的代码可以工作,并将日期作为输出'09-11-2015'。但是,如果我有一个字符串'This is o text extractud fram OCR 09-11-201 5''This is o text xtractud fram OCR 09-11-201''This is o text xtractud fram OCR O9-11-201',它就会失败。如何为这样的场景编写代码,其中它还选择了最接近的匹配项。

EN

回答 2

Stack Overflow用户

发布于 2015-12-04 10:42:16

有几种方法可以实现与正则表达式的近似匹配。最“理论上简单”的方法很可能要求您在regexp的编辑距离-like 动态规划计算中执行DFA

这是一个相当棘手的编码算法,它的实现并不多。最著名的是协议p (从技术上讲,agrep工具实现了几种算法,但最著名的是模糊正则匹配)。

通过这个关键字进行简短的googling就会得到这个图书馆,它似乎有Python绑定,并且可能正是您所需要的。

票数 2
EN

Stack Overflow用户

发布于 2015-12-04 10:33:31

--正如您提到的Levenshtein距离,这并不是标题所要求的,但可能会对您的场景很有用。

代码语言:javascript
复制
from dateutil.parser import parse

s = 'This is o text xtractud fram OCR O9-11-201'

parse(s, fuzzy=True)

datetime.datetime(201, 9, 11, 0, 0)

Dateutil提供了一个模糊日期时间解析器。

这适用于'09-11-201',但不适用于'09-11-201 5'

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/34085616

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档