#python #regex
#python #регулярное выражение
Вопрос:
Я хочу извлечь сумму 495,65 после сопоставления с ключевым словом total. Сумма указана в следующей строке. Заранее спасибо!
Итого: (Только четыреста девяносто шесть и шестьдесят пять дирхамов)
496.65
С наилучшими пожеланиями, вы одобряете предложение и организуете платеж, соответственно мы предоставим вам налоговую накладную.
re.findall('(?<=total :)((.*){2})', string, re.IGNORECASE)
Результат: (Только четыреста девяносто шесть и шестьдесят пять дирхамов)
Ответ №1:
Вы можете сопоставить total :
и зафиксировать значение в группе, сопоставив 1 или более символов новой строки после сопоставления остальной части строки.
bTotal :.*[rn] (d (?:.d ))b
Объяснение
bTotal :.*
Совпадениеtotal :
и остальная часть строки[rn]
Сопоставьте 1 новые строки(d (?:.d ))
Группа захвата 1, сопоставьте цифру с необязательной десятичной частьюb
Граница слова
Демонстрация регулярных выражений | Демонстрация Python
Пример кода
import re
regex = r"bTotal :.*[rn] (d (?:.d ))b"
test_str = ("Total :(Dirham Four Hundred Ninety Six and Sixty Five fils Only)nn"
"496.65nn"
"Best Regards,n"
"y approve the proposal and arrange the payment, accordingly we will provide you the taxn"
"invoice .")
print(re.findall(regex, test_str, re.IGNORECASE))
Вывод
['496.65']
Комментарии:
1. Спасибо! Это сработало. Что делать, если сумма (число) находится в третьей строке, а сумма в словах — во второй строке? Как можно извлечь сумму в этом случае?
2.@M_Arora Вы могли бы сделать это так
bTotal :.*r?n(.*)r?n(d (?:.d )?)b
regex101.com/r/VGi0wD/1 или как это сопоставление всех строк после итога: которые не начинаются с цифры, а затем фиксируют сумму, когда она начинается с цифры и необязательной десятичной частиbTotal :.*(?:r?n(?!d).*)*r?n(d (?:.d ))b
regex101.com/r/N7F9Dj/1