#regex
Вопрос:
Можно ли сопоставить последнее число из другой строки, выглядящее так:
Total fara TVA TVA Total 171,11 RON 32,51 RON 203,62 RON
Чего я хочу: 203,62
Что я пытаюсь regexr.com/64to5 : Total(?:s*(d (?:,d )?)){1}
Что я получаю: 171,11
Любая помощь будет очень признательна! Спасибо.
Ответ №1:
Вы можете использовать группу захвата:
bTotalb.*(?<![d,])(d (?:,d )?)b
bTotalb
Общее количество совпадений между границами слов, чтобы предотвратить частичное совпадение.*
Сопоставьте любой символ, кроме новой строки(?<![d,])
Отрицательный внешний вид, утверждает, что не цифра или , слева(
Группа захвата 1d (?:,d )?
Сопоставьте 1 цифру с необязательной десятичной частью
)
Закрыть группу захватаb
Граница слов
Демонстрация регулярных выражений
Если вы не хотите снова пересекать общую сумму совпадения перед числом:
bTotalb(?:(?!bTotalb).)*(?<![d,])(d (?:,d )?)b
Ответ №2:
С показанными вами образцами, пожалуйста, попробуйте следовать регулярному выражению.
bTotal.*(?<=s)(d ,d )s
Онлайн-демонстрация для приведенного выше регулярного выражения
Пояснение: Добавление подробного объяснения вышеизложенного.
bTotal.* ##Using word boundary along with string Total followed by .* greedy match here.
(?<=s) ##using positive look behind to make sure spaces are present before next mentioned regex.
(d ,d ) ##Creating 1st capturing group to match 1 or more occurrences of digits followed by comma and followed by 1 or more digits.
s ##matching 1 or more occurrences of spaces here.
ИЛИ в соответствии с хорошим предложением четвертой брид: без позитивного взгляда попробуйте следовать:
bTotal.*s(d ,d )s
Комментарии:
1. @shAkur, не могли бы вы, пожалуйста, дать мне знать, сработал ли мой ответ для вас?