SwiftMessage Регулярное выражение - PullRequest
0 голосов
/ 25 ноября 2018

У меня есть следующее сообщение:

{1:F01ANZBDEF0AXXX0509036846}{2:I103ANZBDEF0XXXXN}{4::20:TEST000001:23B:CRED:32A:141117EUR0,1:33B:EUR1000,00:50A:ANZBAU30:59:ANZBAU30:71A:SHA-}{5:{CHK:1DBBF1D81EE1}{TNG:}}

И я хочу, чтобы оно было преобразовано, как показано ниже, с пробелами в блоке 4 (то есть

{4: :20:TEST000001 :23B:CRED :32A:141117EUR0,1 :33B:EUR1000,00 :50A:ANZBAU30 :59:ANZBAU30 :71A:SHA -}

{1:F01ANZBDEF0AXXX0509036846}{2:I103ANZBDEF0XXXXN}{4: :20:TEST000001 :23B:CRED :32A:141117EUR0,1 :33B:EUR1000,00 :50A:ANZBAU30 :59:ANZBAU30 :71A:SHA -}{5:{CHK:1DBBF1D81EE1}{TNG:}}

Я пытался извлечь с помощью групп, а затем применить регулярное выражение. Но я потерпел неудачу. Не могу найти ошибку, которую я делаю.

public static void StringReplace() {
    String data = "{1:F01ANZBDEF0AXXX0509036846}{2:I103ANZBDEF0XXXXN}{4::20:TEST000001:23B:CRED:32A:141117EUR0,1:33B:EUR1000,00:50A:ANZBAU30:59:ANZBAU30:71A:SHA-}{5:{CHK:1DBBF1D81EE1}{TNG:}}";

    Pattern pat = Pattern.compile("(({1:\\w+})({2:\\w+})({4::\\d+:\\w+:\\d+.:\\w+:\\d+.:\\d+\\w+,\\d:\\d+.:\\w+,\\d+:\\d+.:\\w+:\\d+:\\w+:\\d+.:\\w+-})({5:{\\w+:.\\w+}{\\w+.}}))");

    Matcher m = pat.matcher(data);

    if(m.matches()) {
        System.out.println(m.group(0));
    }
}

Спасибо в Adavance

1 Ответ

0 голосов
/ 25 ноября 2018

Вы только что сопоставили строку и просто распечатали ее, но не поместили логику между ними.Вам нужно добавить логику ввода пробела в блоке 4.

Глядя на ожидаемый результат вашего блока 4, вы можете сначала перехватить блок 4, используя это регулярное выражение,

(.*?)(\\{4.*?\\})(.*?)

изатем замените двоеточие пробелом (:) в содержимом группы 2, которое вы называете блоком 4. Я вижу, вы не вводите пробел с каждым двоеточием, а только для двоеточия, за которым следуют 2-3 символа, за которыми следует двоеточие.Я реализовал логику соответствующим образом в моем методе replaceAll().

Вот модифицированный код Java,

public static void StringReplace() {
    String data = "{1:F01ANZBDEF0AXXX0509036846}{2:I103ANZBDEF0XXXXN}{4::20:TEST000001:23B:CRED:32A:141117EUR0,1:33B:EUR1000,00:50A:ANZBAU30:59:ANZBAU30:71A:SHA-}{5:{CHK:1DBBF1D81EE1}{TNG:}}";

    Pattern pat = Pattern.compile("(.*)(\\{4.*?\\})(.*)");
    Matcher m = pat.matcher(data);

    if (m.find()) {
        String g1 = m.group(1);
        String g2 = m.group(2).replaceAll(":(?=\\w{2,3}:)", " :");
        String g3 = m.group(3);
        System.out.println(g1 + g2 + g3);
    } else {
        System.out.println("Didn't match");
    }
}

Это выводит следующий вывод, как вы ожидаете,

{1:F01ANZBDEF0AXXX0509036846}{2:I103ANZBDEF0XXXXN}{4: :20:TEST000001 :23B:CRED :32A:141117EUR0,1 :33B:EUR1000,00 :50A:ANZBAU30 :59:ANZBAU30 :71A:SHA-}{5:{CHK:1DBBF1D81EE1}{TNG:}}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...