найти элемент поиска плюс 4 строки до и после

#regex #notepad #regex-lookarounds

#регулярное выражение #notepad #регулярное выражение -поиск

Вопрос:

Я использую notepad и хотел бы найти контекст, в котором встречается конкретная строка.

Итак, строка поиска 0wh.*0subj , и я хотел бы найти этот элемент поиска плюс 4 строки непосредственно перед и после него.

 eg: xxx means whatever is on a new line. the search result should be:
xxx
xxx
xxx
xxx
0wh.*0subj
xxx
xxx
xxx
xxx
  

Я пробовал using nr , но это не работает. Любая предоставленная помощь будет высоко оценена.

С уважением

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

1. Это не проблема программирования. По крайней мере, до последнего редактирования. Теперь это выглядит по-другому 😉

2. Если вы используете Notepad , то всякий раз, когда вы находили «0wh. * 0subj» или что-либо, что вы хотите найти, вы также можете видеть четыре строки, предшествующие и после, верно? Зачем вам для этого нужно конкретное регулярное выражение? Собираетесь ли вы его заменить?

Ответ №1:

Это будет работать в Notepad (протестировано):

 (?m)(^[^rn]*R ){4}0wh.*0subj[^rn]*R (^[^rn]*R ){4}
  

На скриншоте обратите внимание, что строка 555 не выбрана. Это просто текущая строка.

ИТАК, N

Объясните регулярное выражение

 (?m)                     # set flags for this block (with ^ and $
                         # matching start and end of line) (case-
                         # sensitive) (with . not matching n)
                         # (matching whitespace and # normally)
(                        # group and capture to 1 (4 times):
  ^                      #   the beginning of a "line"
  [^rn]*               #   any character except: 'r' (carriage
                         #   return), 'n' (newline) (0 or more times
                         #   (matching the most amount possible))
  R                     #   'R' (1 or more times (matching the most
                         #   amount possible))
){4}                     # end of 1 (NOTE: because you are using a
                         # quantifier on this capture, only the LAST
                         # repetition of the captured pattern will be
                         # stored in 1)
0wh                      # '0wh'
.                       # '.'
*                       # '*'
0subj                    # '0subj'
[^rn]*                 # any character except: 'r' (carriage
                         # return), 'n' (newline) (0 or more times
                         # (matching the most amount possible))
R                       # 'R' (1 or more times (matching the most
                         # amount possible))
(                        # group and capture to 2 (4 times):
  ^                      #   the beginning of a "line"
  [^rn]*               #   any character except: 'r' (carriage
                         #   return), 'n' (newline) (0 or more times
                         #   (matching the most amount possible))
  R                     #   'R' (1 or more times (matching the most
                         #   amount possible))
){4}                     # end of 2 (NOTE: because you are using a
                         # quantifier on this capture, only the LAST
                         # repetition of the captured pattern will be
                         # stored in 2)