Regex, чтобы удалить конкретное слово из URL - PullRequest
1 голос
/ 30 сентября 2019

В Dynatrace есть URL-адреса, содержащие слово, которое является динамическим. Хотите удалить это динамическое слово из URL с помощью регулярного выражения

Ниже приведены различные URL-адреса

  • / aaa / fdsadx / drtyu / ab_cd / myword? Id =953
  • / asd / XXXXX / sadsa / two / xx_yy ? Id = 953
  • / asd / fdsadx / df / three / pp_qq /myword
  • / asd / fdsadx / sadsa / ab_cd
  • / SSS / fdsadx / cvnm / далее / gg_hh

Ожидаемый результат

  • / asd / fdsadx / sadsa // myword? Id = 953
  • / asd / fdsadx / sadsa /? Id = 953
  • / asd / fdsadx / sadsa // myword
  • / asd / fdsadx / sadsa /

Я могу управлять этим регулярным выражением

(\ S +?) Ab_cd (. *)

Но это не работает для динамических значений и всех URL. Как я могу улучшить регулярное выражение для удаления динамического значения?

Ответы [ 2 ]

3 голосов
/ 30 сентября 2019

Вы можете использовать 2 группы захвата и сопоставить часть подчеркивания после сопоставления с косой чертой

^(\S+/)[^\s_]+_[^\s_/?]+(.*)
  • ^ Начало строки
  • (\S+/) Capture группа 1 , совпадение 1+ раз с непробельным символом, за которым следует /
  • [^\s_]+ Совпадение 1+ раз с любым символом, кроме пробела или _
  • _ Совпадение буквально
  • [^\s_/?]+ Совпадение 1+ раз с любым символом, кроме символа пробела, _, / или ?
  • (.*) Захват группа 2 Совпадение 0+ раз с любым символом, кроме новой строки

Regex demo

В качестве замены используйте 2 группы захвата, например $1$2

Если вы хотите сопоставить коды стран и знаете, что они, например, состоят из символов a-zA-Z, вы можете сделать класс символов более конкретным

^(\S+/)[A-Za-z]+_[A-Za-z]+(.*)

Regex demo

1 голос
/ 30 сентября 2019

Кажется, что первая часть исправлена, и вы все обрезаете после '/' или '?'. Учитывая это, возможно, вы хотите что-то вроде:

s/(\/asd\/fdsadx\/sadsa\/)[^/?]+(.*)/\1\2/

Это захватит голову в \ 1, игнорируя группу символов, которые не являются ни '\', ни '?',и захватить хвост в \ 2.

...