1

Я пытаюсь заменить строку «Управление бизнес-услугами» (без кавычек), которая находится между "Назначенная рабочая группа" и «)». Например:

проект в (KISHORE_TEST, "Управление бизнес-услугами") И "Назначенная рабочая группа" в (KISHORE_TEST, "Управление бизнес-услугами", "Учетная запись", "Автоматизация BSM") ИЛИ "Рабочая группа" в ("Автоматизация BSM") ИЛИ "Назначенная рабочая группа" "in (" Управление бизнес-услугами "," Автоматизация BSM ") ИЛИ" Назначенная рабочая группа "в (" Автоматизация BSM ") и team =" Управление бизнес-услугами "

Регулярное выражение должно соответствовать ТОЛЬКО:

  1. "Назначенная рабочая группа" в (KISHORE_TEST, «Управление бизнес-услугами», "Учетная запись", "Автоматизация BSM")
  2. "Назначенная рабочая группа" в («Управление бизнес-услугами», "BSM Automation")

Все другие вхождения "Business Service Management", которые не входят в упомянутый шаблон, должны быть опущены.

Я только что придумал (?<=Assigned Workgroup)(.*?)(\w*Business Service Management*\w)(.*?)\) что я знаю неправильно, но я новичок в регулярных выражениях, поэтому не могу найти правильный.

Могу ли я попросить вашей помощи здесь?

2 ответа2

1

Этот делает работу:

Assigned Workgroup.*?"\KBusiness Service Management(?="[^)]*\))

Объяснение:

Assigned Workgroup              : literally
.*?                             : 0 or more any character, not greedy
"                               : a double quote
\K                              : forget all we have seen until this position
Business Service Management     : literally
(?=                             : positive lookahead
  "                             : a double quote
  [^)]*                         : 0 or more anyy character that is not a close parenthesis
  \)                            : a close parenthesis
)                               : end lookahead

Использование:

Использование Perl

my $str = <<EOD;
project in (KISHORE_TEST, "Business Service Management") AND "Assigned Workgroup" in (KISHORE_TEST,"Business Service Management", "Account","BSM Automation") OR "Workgroup" in ("BSM Automation") OR "Assigned Workgroup" in ("Business Service Management","BSM Automation") OR "Assigned Workgroup" in ("BSM Automation") and team = "Business Service Management"
EOD

$str =~ s/Assigned Workgroup.*?"\KBusiness Service Management(?="[^)]*\))/new_string/g;
say $str;

Выход:

проект в (KISHORE_TEST, «Управление бизнес-услугами») И "Назначенная рабочая группа" в (KISHORE_TEST, "new_string", "Учетная запись", "Автоматизация BSM") ИЛИ "Рабочая группа" в ("Автоматизация BSM") ИЛИ "Назначенная рабочая группа" в ("new_string", "BSM Automation") ИЛИ "Назначенная рабочая группа" в ("BSM Automation") и team = "Управление бизнес-услугами"

Это будет работать с php и с Notepad++ и многими языками / инструментами, которые используют PCRE регулярное выражение.


Если у вас есть некоторые трудности с lookaround, вы можете использовать:

  • Найти: (Assigned Workgroup.*?")Business Service Management("[^)]*\))
  • Заменить: $1new_string$2
0

Это не будет лучшим решением, но вы можете попробовать это

(?<="Assigned Workgroup" in \()["?\w"?|,]*\"(Business Service Management)

который вы можете продолжить, чтобы уточнить в regex101. Затем вам нужно использовать \1 или $1 для ссылки на группу захвата, которая содержит Business Service Management , чтобы заменить ее.

Всё ещё ищете ответ? Посмотрите другие вопросы с метками .