Извлечение слова из строки, зная индекс одного символа внутри слова (python) - PullRequest
0 голосов
/ 16 октября 2018

Я использую diff_match_patch метод с именем match_main, чтобы найти наилучшее совпадение, например, номера счета в списке доступных номеров счетов, если пользователь предоставляет номер в другом формате (порядок, разделители)

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, и это в середине «правильного» номера и вв этом случае я не знаю, как извлечь это число (я знаю индекс символа где-то внутри числа и что число начинается после последнего пробела и заканчивается до следующего пробела)

1 Ответ

0 голосов
/ 16 октября 2018

Если я правильно понимаю ваш вопрос, то вам нужно найти последний символ-разделитель слева от символа, возвращаемого 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) и не хотите создавать большой массив только для того, чтобы вычислить ваш номер.

...