Извлечение даты и времени в ABAP через Regex - PullRequest
0 голосов
/ 06 июня 2018

Я хотел отделить время и дату от этой строки, используя REGEX, потому что я чувствую, что это единственный способ, которым я могу отделить это.Но я не совсем знаком с тем, как это сделать, может быть, кто-то может помочь мне здесь.

Исходная строка:

"Ваш товар был доставлен в или в почтовый ящик в 3: 34:00 1 сентября 2016 года в Техасе, MT 59102 "

Результат, который я хочу достичь / заполнить:

lv_time = 3:34 вечера

lv_date = 1 сентября 2016 г.

Вот код, который я пытался сделать, но я могу только сократить его следующим образом:

lv_status = Ваш товар был доставлен в или впочтовый ящик на

lv_time = 3

lv_date =: 34:00 1 сентября 2016 года в Техасе, MT 59102.

Вот код, который у меня пока есть:

    DATA: lv_status TYPE string,
      lv_time   TYPE string,
      lv_date  TYPE string,
      lv_off    TYPE i.

lv_status = 'Your item was delivered in or at the mailbox at 3:34 pm on September 1, 2016 in TEXAS, MT 59102.'.
FIND REGEX '(\d+)\s*(.*)' IN lv_status SUBMATCHES lv_time lv_date MATCH OFFSET lv_off.
lv_status = lv_status(lv_off).

1 Ответ

0 голосов
/ 06 июня 2018

Вы просили об этом, вот оно:

\b((1[0-2]|0?[1-9]):([0-5][0-9]) ([AaPp][Mm])) on (January|February|March|April|May|June|July|August|September|October|November|December)\D?(\d{1,2}\D?)?\D?((?:19[7-9]\d|20\d{2})|\d{2})

Это принимает время в формате HH:MM am/pm и даты в Jan-Dec, dd 1970-2999.Каждая часть захвачена в своей собственной группе.

Демонстрация показывает версию, которая позволяет сокращенные названия месяцев:

Демо

...