Регулярное выражение Notepad ++ для размещения даты из файла в начале каждой строки - PullRequest
0 голосов
/ 08 мая 2020

Для файла в следующем формате (где X - любой текст без символов новой строки):

01st December 2019
0100 X
0200 X
0300 X
1745 X
02nd December 2019
0015 X
1555 X
2335 X

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

01st December 2019 0100 X
01st December 2019 0200 X
01st December 2019 0300 X
01st December 2019 1745 X
02nd December 2019 0015 X
02nd December 2019 1555 X
02nd December 2019 2335 X

Я знаю, что могу найти строки, начинающиеся с дат, путем поиска [0-3][0-9][snrt[tdh], а начало строки - путем поиска ^ , но как я могу сказать «найти ^ и заменить на предыдущее совпадение для даты»?

1 Ответ

1 голос
/ 09 мая 2020

Если количество соединяемых строк не слишком велико, вы можете сделать следующее, где я ограничил количество строк до 7:

  • Ctrl + H
  • Найдите что: ^(\d\d(?:st|nd|rd|th) \w+ \d{4})$\R(^\d{4} .+$)(?:\R(^\d{4} .+$))?(?:\R(^\d{4} .+$))?(?:\R(^\d{4} .+$))?(?:\R(^\d{4} .+$))?(?:\R(^\d{4} .+$))?
  • Замените на: $1 $2(?3\n$1 $3)(?4\n$1 $4)(?5\n$1 $5)(?6\n$1 $6)(?7\n$1 $7)
  • ПРОВЕРИТЬ Обернуть
  • ПРОВЕРИТЬ Регулярное выражение
  • НЕ ПРОВЕРИТЬ . matches newline
  • Заменить все

Пояснение:

^                       # beginning of line
  (                     # group 1
    \d\d                  # 2 digits (the day)
    (?:st|nd|rd|th)       # any of st or nd or rd or th
    \w+                   # 1 or more word character (the month)
    \d{4}                 # 4 digits (the year)
  )                     # end group
$                       # end of line
\R                      # any kind of linebreak
(                       # group 2
  ^                     # beginning of line
    \d{4}                 # 4 digits (the time)
    .+                    # 1 or more any character but newline
  $                     # end of line
)                       # end group 2
(?:                     # non capture group
  \R                      # any kind of linebreak
  (^\d{4} .+$)            # group 3, same pattern as in group 2
)?                      # end group, optional
(?:\R(^\d{4} .+$))?     # same as above for group 4
(?:\R(^\d{4} .+$))?     # same as above for group 5
(?:\R(^\d{4} .+$))?     # same as above for group 6
(?:\R(^\d{4} .+$))?     # same as above for group 7
                    you can add more groups if you need

Замена:

$1 $2                   # content of group 1, space, content of group 2
(?3                     # if group 3 exists:
  \n                      # linefeed
  $1 $3                   # content of group 1, space, content of group 3
)                       # end condition
(?4\n$1 $4)             # same as above fot group 4
(?5\n$1 $5)             # same as above fot group 5
(?6\n$1 $6)             # same as above fot group 6
(?7\n$1 $7)             # same as above fot group 7

Скриншот (до):

enter image description here

Снимок экрана (после):

enter image description here

...