Регулярное выражение извлекает номер из строки

#regex

Вопрос:

Мне нужно извлечь выделенный номер из этих двух строк.

  1. Уважаемый IBBL CH Приобрел 10.00 BDT по адресу grameenphone.com, BD 05.09.21 20:06 Карта ***9793 Avl Бал: 930,53 BDT Помощь:16259 Получите скидку 10% от DARAZ *Tamp;C
  2. TK 20,312.84 был возвращен на ваш A/C **04994509 в 10/01/21 03:27 вечера для перевода NPSB: 71210110003106, Баланс:21 019,50. Справка:16259,8331090 — IBBL iBanking

Я пробовал (?<=tk )(. d) и для первого, и d. (?=bdt) для второго, но ничего не вышло.

Комментарии:

1. Попробуйте d (?:[.,]d )*(?=s*BDT)|(?<=TKs)d (?:[.,]d )* , если вы используете шаблон в среде, которая выбирает первое совпадение. Смотрите эту демонстрацию регулярных выражений.

2. Да, я просто сопоставляю первый случай, и это работает. Спасибо 🙂

Ответ №1:

Вы можете использовать

 d (?:[.,]d )*(?=s*BDT)|(?<=TKs)d (?:[.,]d )*
 

Смотрите демонстрацию регулярных выражений. Подробные сведения:

  • d — одна или несколько цифр
  • (?:[.,]d )* — ноль или более вхождений точки или запятой, а затем одной или нескольких цифр
  • (?=s*BDT) — место, за которым сразу следует ноль или более пробелов, а затем BDT
  • | — или
  • (?<=TKs) — место, непосредственно предшествующее TK пробелу и пробелу
  • d (?:[.,]d )* — одна или несколько цифр, а затем ноль или более вхождений точки или запятой, а затем одна или несколько цифр