Regex Заменить один символ в FileName в определенной строке - PullRequest
0 голосов
/ 13 октября 2018

У меня следующий сценарий:

File '/oname=$INSTDIR\workspace\jetty\work\webapp\WEB-INF\classes\com\sample\service\core\util\SomeModule$SomeModulesData$SomeModulesDataBuilder.class'     '${ADDEDSOURCE}workspace\jetty\work\webapp\WEB-INF\classes\com\sample\service\core\util\SomeModule$SomeModulesData$SomeModulesDataBuilder.class'    ; Added file
File '/oname=$INSTDIR\workspace\jetty\work\webapp\WEB-INF\classes\com\sample\service\core\util\CoolUtil.class'  '${ADDEDSOURCE}workspace\jetty\work\webapp\WEB-INF\classes\com\sample\service\core\util\CoolUtil.class'     ; Added file

Я хочу заменить знак '$' в имени * .class (может быть и другим) на '$$'.Я могу получить имя файла, но мне нужна только одна группа знака доллара.

Вот мой пример: https://regex101.com/r/Wa2cF6/2

В Java я просто хочу сделать:

public static void main(String[] args) {

    String s = "File '/oname=$INSTDIR\\workspace\\jetty\\work\\webapp\\WEB-INF\\classes\\com\\sample\\service\\core\\util\\SomeModule$SomeModulesData$SomeModulesDataBuilder.class' \t'${ADDEDSOURCE}workspace\\jetty\\work\\webapp\\WEB-INF\\classes\\com\\sample\\service\\core\\util\\SomeModule$SomeModulesData$SomeModulesDataBuilder.class' \t; Added file";
    s = s.replace("\\\\([a-zA-Z0-9_$]+)\\.\\w+'\\s", "$$");
    System.out.println(s);
}

И ожидать результата

File '/oname=$INSTDIR\workspace\jetty\work\webapp\WEB-INF\classes\com\sample\service\core\util\SomeModule$$SomeModulesData$$SomeModulesDataBuilder.class'   '${ADDEDSOURCE}workspace\jetty\work\webapp\WEB-INF\classes\com\sample\service\core\util\SomeModule$$SomeModulesData$$SomeModulesDataBuilder.class'  ; Added file

Спасибо за вашу помощь.

1 Ответ

0 голосов
/ 13 октября 2018

То есть вы хотите заменить знак $ только в имени класса?Я бы определенно пошел на более низкий уровень, используя индексы и класс StringBuilder:

private static final String testString =  "File '/oname=$INSTDIR\\workspace\\jetty\\work\\webapp\\WEB-INF\\classes\\com\\sample\\service\\core\\util\\SomeModule$SomeModulesData$SomeModulesDataBuilder.class' \t'${ADDEDSOURCE}workspace\\jetty\\work\\webapp\\WEB-INF\\classes\\com\\sample\\service\\core\\util\\SomeModule$SomeModulesData$SomeModulesDataBuilder.class' \t; Added file";

public static void main(String[] args) {
    System.out.println(replaceDollars(testString));
}

private static final Pattern PATH = Pattern.compile("(\\'[\\S]*)(\\\\[\\w$]+\\.class\\')");

public static String replaceDollars(String string) {
    Matcher m = PATH.matcher(string);
    StringBuilder builder = new StringBuilder();
    int end = 0;

    while (m.find()) {
        builder
                .append(string, end, m.start())
                .append(m.group(1))
                .append(m.group(2).replace("$", "$$"));
        end = m.end();
    }

    builder.append(string, end, string.length());

    return builder.toString();
}

Используя следующее регулярное выражение: (\'[\S]*)(\\[\w$]+\.class\'), чтобы найти файлы во входной строке.

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