#python #regex #matching #re
Вопрос:
В настоящее время у меня работает код, но единственным недостатком является то, что я не установил код python для регулярных выражений оптимальным образом.
Исходный текст содержит сумму в тысячах, сотнях тысяч и миллионах. Без десятичной дроби. Я имею в виду, что он имеет десятичное число, но всегда «, 00».
Пример строки в тексте:
Долг 1 из 2 на сумму: $ 58.610,00, неоплаченный
Прямо сейчас следующий код фиксирует миллионы штрафов, но менее 100 000 пропускает одну цифру.
regex = r"(d ).(d ).(d ),(d )"
match = re.search(regex, line, re.MULTILINE)
print = "$" match.group(1) match.group(2) match.group(3)
Это захватывает вот так:
$5860
Но цель такая:
$58610
Если сумма указана в миллионах, она фиксируется нормально, мне пришлось сделать это так, потому что валюта, с которой я работаю, имеет большие суммы. Поэтому я постоянно управляю такими количествами.
С уважением
Ответ №1:
Вы можете использовать следующее регулярное выражение для извлечения ожидаемых совпадений и последующего удаления разделителя тысяч:
$s?(d{1,3}(?:.d{3}) )(?:,d )?(?!d)
Вам нужно получить значение группы 1, удалить из него точки и повторно ввести $
в начале. Смотрите демонстрацию регулярных выражений. Подробные сведения:
$
—$
символs?
— необязательный пробел(d{1,3}(?:.d{3}) )
— Группа 1: от одной до трех цифр, а затем одно или несколько вхождений (поскольку вы хотите сопоставить только тысячи и более).
и три цифры(?:,d )?
— необязательная последовательность запятой и одной или нескольких цифр(?!d)
— сразу справа не допускается ни одна цифра.
Смотрите демонстрацию Python:
import re
text = 'Debt 1 of 2 for an amount of: $ 58.610,00, Unpaid'
match = re.search(r'$s?(d{1,3}(?:.d{3}) )(?:,d )?(?!d)', text)
if match:
print(f"${match.group(1).replace('.', '')}")
# => $58610
Комментарии:
1. Ты мужик! Это работает идеально! Большое вам спасибо. Я ценю это