我正在使用称为diff_match_patch
的{{1}}方法,如果用户以不同格式(顺序,分隔符)提供了编号,则在可用发票编号列表中找到例如发票编号的最佳匹配
match_main
返回一个match_main
,例如,如果模式为 index
,并且可能的发票编号列表为字符串 {{1 }} (因此发票号以空格作为分隔符)将返回30(“正确”号的第一个字符的索引,该数字为 20170630/4072/00
),我知道该如何自动提取该数字(我知道该数字的第一个字符的索引,并且知道它在下一个空格之前结束),但是如果用户提供发票号但顺序不同( 20180923-5032-02 2016-6872-01 20170630-4072-00 20170620-4072-00 20091204-7914-00
),它将返回39,并且它位于“正确”数字的中间,在这种情况下,我不知道如何提取该数字(我知道数字内某个位置的字符索引,并且该数字在最后一个空格之后开始,在下一个空格之前结束
答案 0 :(得分:0)
如果我正确理解了您的问题,那么您需要做的是找到match_main返回的字符左侧的最后一个分隔符,以及该字符右侧的第一个分隔符。如果是这样,类似这样的事情应该起作用:
about_here = match_main(mystery_text, invoice, 0)
left_sep = mystery_text.rfind(' ', 0, about_here) + 1
right_sep = mystery_text.find(' ', about_here)
my_invoice = mystery_text[left_sep:right_sep]
这假定分隔符始终是一个空格。您还需要检查边界条件:如果发票位于字符串的开头或结尾,则rfind
和find
将返回-1。这就是您要找的东西吗?
顺便说一句,塞尔吉奥建议先将字符串分开,然后再进行匹配。他是对的,但是我假设您正在处理一个非常长的输入字符串(因为您使用的是dif-match-patch),并且不想创建一个大数组只是为了查找数字。