Найти подстроку из сложной строки с помощью регулярного выражения - PullRequest
0 голосов
/ 09 июля 2020

У меня есть строка, содержащая огромный код сценария, как показано ниже:

String script = "node {
    stage(someString) {
        try {
            **parameters= [
                [someString],
        [someString],
        [someString],
        [someString],
        [someString],
        [someString],
            [someString],
            ]**
            //some more script
    }
}";

Я хочу извлечь переменную параметров, содержащую массив значений массива

Я пробовал следующий шаблон, но не работал

Pattern pattern = Pattern.compile("parameters= [(.*?)]");

Как мне извлечь переменную параметров из строковой переменной скрипта с помощью Regex?

Заранее спасибо!

1 Ответ

1 голос
/ 09 июля 2020

Вы можете попробовать использовать:

parameters=\s*\[(.*)]

Объяснение приведенного выше регулярного выражения:

  • parameters= - Соответствует parameters= буквально.
  • \s* - соответствует символу пробела ноль или более раз.
  • \[ - соответствует [ буквально.
  • (.*)] - представляет группу захвата, захватывающую все до ].

Pictorial Representation

You can find the demo of the above regex in здесь.

Пример реализации в java:

import java.util.regex.Pattern;
import java.util.regex.Matcher;

public class Main
{
    private static final Pattern pattern = Pattern.compile("parameters=\\s*\\[(.*)]", Pattern.DOTALL);
    public static void main(String[] args) {
        String string = "node {\n"
     + "    stage(someString) {\n"
     + "        try {\n"
     + "            **parameters= [\n"
     + "                [someString],\n"
     + "        [someString],\n"
     + "        [someString],\n"
     + "        [someString],\n"
     + "        [someString],\n"
     + "        [someString],\n"
     + "            [someString],\n"
     + "            ]**\n"
     + "            //some more script";
    StringBuilder sb = new StringBuilder();
    Matcher matcher = pattern.matcher(string);
    while(matcher.find()){
        // Replaced all the unwanted spaces and commas. You can address that accordingly.
        sb.append(matcher.group(1).replaceAll("[\\s,]+", " "));
    }
    System.out.println(sb.toString());
}
}

Найдите пример выполнения приведенной выше реализации в здесь.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...