【问题标题】:Extraction of the word from string knowing the index of the one character inside the word (python)从字符串中提取单词,知道单词中一个字符的索引(python)
【发布时间】:2018-10-16 09:49:12
【问题描述】:

如果用户以不同的格式(顺序、分隔符)提供数字,我正在使用称为 match_maindiff_match_patch 方法在可用发票编号列表中查找例如发票编号的最佳匹配

match_main 返回 index,例如,如果模式是 20170630/4072/00 并且可能的发票编号列表是字符串 20180923-5032-02 2016-6872-01 20170630-4072-00 20170620-4072-00 20091204-7914-00(所以带有空格作为分隔符的发票号码)它将返回 30(“正确”号码的第一个字符的索引,即 20170630-4072-00,我知道如何自动提取该号码(我知道数字的第一个字符,我知道它在下一个空格之前结束)但是如果用户提供发票编号但顺序不同(4072-00-20170630)它将返回 39 并且位于 '正确的数字,在这种情况下,我不知道如何提取该数字(我知道数字内某处的字符索引,并且数字在最后一个空格之后开始并在下一个空格之前结束)

【问题讨论】:

  • 您应该首先解析提供的发票编号以匹配您的模式。将其拆分为 3 个所需的数字,然后按您想要的顺序返回。

标签: python string python-3.x extract extraction


【解决方案1】:

如果我正确理解了您的问题,那么您需要做的是找到 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]

这假定您的分隔符始终是一个空格。您还需要检查边界条件:如果您的发票位于字符串的开头或结尾,rfindfind 将返回 -1。这大概是您想要的吗?

顺便说一句,Sergio 建议先拆分字符串,然后进行匹配。他是对的,但我假设您正在处理一个很长的输入字符串(因为您使用的是 dif-match-patch)并且不想创建一个大数组来查找您的号码。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2015-05-08
    • 2016-09-10
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-12-27
    • 2022-06-14
    相关资源
    最近更新 更多