RegEx для определения даты, за которой следует специальный шаблон - PullRequest
2 голосов
/ 12 мая 2019

У меня есть шаблон строк / значений, встречающихся на разных интервалах. Шаблон выглядит следующим образом: 30/09/2016 2 085 669 0 0 UC №

  1. Дата> ПРОБЕЛ> Число, разделенное запятой> ПРОБЕЛ> НОМЕР> ПРОБЕЛ> НОМЕР> ПРОБЕЛ> STRING> ПРОБЕЛ> НОМЕР

Как мне определить это и извлечь из клетки. Я пытался использовать регулярные выражения для решения этой проблемы. Обратите внимание, что шаблон может встречаться в любом случае в одной ячейке. Viz.

  1. Somestring (пробел) (30.09.2016 2 085 669 0 0 UC No) (пробел) Дополнительная строка
  2. Somemorestring (пробел) (30.09.2016 2 085 669 0 0 UC No)
  3. Скобки только для иллюстрации

Чтобы определить дату, я использую приведенное ниже регулярное выражение, но это не самый лучший способ, но я выполняю свою работу.

(^\d{1,2}\/\d{1,2}\/\d{4}$)

Как сшить это с оставшимся рисунком?

Ответы [ 2 ]

3 голосов
/ 12 мая 2019

Вы сопоставляете только дату как часть между якорями, чтобы утверждать начало ^ и конец $ строки.

Обратите внимание, что если вы хотите сопоставить только значение, вы можете опустить круглые скобки (), чтобы сделать его группой захвата вокруг выражения.

Вы можете расширить его до:

^\d{1,2}\/\d{1,2}\/\d{4} \d+(?:,\d+)+ \d+ \d+ [A-Za-z]+ [A-Za-z]+$

Объяснение

  • ^ Начало строки
  • \d{1,2}\/\d{1,2}\/\d{4} Дата матча как шаблон
  • \d+(?:,\d+)+ Совпадение 1+ цифр и повторение 1+ раз с запятой и цифрой
  • \d+ \d+ Совпадение 2 раза по 1+ цифрам с пробелом
  • [A-Za-z]+ [A-Za-z]+ Матч 2 раза 1+ символов a-z, за которым следует пробел
  • $ Конец строки

Regex demo

1 голос
/ 12 мая 2019

Если вы хотите извлечь только дату из любого места строки, это выражение использует две группы захвата до и после даты, а средняя группа записывает нужную дату:

(.*?)(\d{1,2}\/\d{1,2}\/\d{4})(.*)

Возможно, вы не захотите использовать начало ^ и конец $ chars, и это будет работать.

enter image description here

Если вы хотите сопоставить и захватить все, вы можете просто добавить больше границ и пошагово сопоставлять шаблоны, возможно, аналогично этому выражению:

(.*?)(\d{1,2}\/\d{1,2}\/\d{4})\s+([0-9,]+)\s+([0-9]+)\s+([0-9]+)\s+([A-Z]+)\s+(No)(.*)

Этот инструмент может помочь вам редактировать / модифицировать / изменять выражения по своему усмотрению.

enter image description here

Я добавил дополнительные границы, просто чтобы быть в безопасности, что вы можете упростить.

Описательный график RegEx

Эта ссылка поможет вам визуализировать ваши выражения:

enter image description here

...