У меня есть несколько строк, которые выглядят так:
str1="Quantity and price: 120 units;the total amount:12000.00"
str2="Quantity:100, amount:10000.00"
str3="Quantity:100, price: 10000 USD"
str4="Parcel A: Quantity:100, amount:$10000.00,Parcel B: Quantity:90, amount:$9000.00"
strlist=[str1,str2,str3,str4]
Я хочу сопоставить сумму $ 12000, $ 10000, 10000 в первых 3 строках и 10000 долларов США и 9000 долларов США в последней строке. Однако в первой строке есть и «цена», и «сумма». Я подумал, используя "|" регулярное выражение будет искать слева направо, поэтому я хочу, чтобы регулярное выражение сначала смотрело «количество», если оно не представлено, ищите «цену». Я пробовал следующий код:
amount_p = re.compile(r'(?:amount|price):(.*?)(?:USD|\.00)')
for i in strlist:
amount=re.findall(amount_p,i)
print(amount)
[' 120 units;the total amount:$12000']
['10000']
[' 10000 ']
['$10000', '$9000']
Каким-то образом регулярное выражение игнорировало «количество» и искало только «цену» в первой строке. Затем я попробовал следующее:
amount_p = re.compile(r'.*(?:amount|price):(.*?)(?:USD|\.00)')
, что дает мне
['12000']
['10000']
[' 10000 ']
['$9000']
В этом случае регулярное выражение соответствует только 9000 долларов в последней строке и игнорирует 10000 долларов. Итак, мой вопрос в том, какова функция. * Вначале и есть ли способ решить мою проблему? Поиск чисел не работает, потому что в моих реальных данных в одном тексте есть много других чисел. Заранее всем спасибо !!!!