Java: Шаблон Как сопоставить любой символ или символ в любом порядке между двумя скобками - PullRequest
0 голосов
/ 20 апреля 2020

Я пытаюсь сопоставить любые символьные символы в любом порядке, способном

. У меня три строки, которые объединяются в одну строку

line 1 = DE-120  LLL[310]  CHR(9049         9360          TRANSNSW      400000000000000018416)

line2 =  DE-121  LLL[035]  CHR(00317010024/VER/1//CRT/UCAF//POS/2/)


line3 =  DE-123  LLL[151] (/VER/1//MSO/SYSTEST_MSO_DASH//TXD/2020-04-20T03:47:47.492Z//AQU/SYSTEST_ACQ_S2I//TTY/AUTH//OID/311e12cc-4561-4b0a-9540-f30d5ef8d744//CLI/IUV5OJDNV5LZG/)";

, пока мой код

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


Pattern patternreq = Pattern.compile("(DE\\W*\\d*)(\\s*\\w*\\W*)(\\d*)(\\W*\\s*)(\\w*)(\\()([\\w*\\s*]+)(\\))");

String txn = "DE-120  LLL[310]  CHR(9049                                                 9252                                                    9360                                                            9408000000009556SYSTEST_MSO_DASH                        TRANSNSW        9661293208721                               400000000000000018416)DE-121  LLL[035]  CHR(00317010024/VER/1//CRT/UCAF//POS/2/)DE-123  LLL[151]  CHR(/VER/1//MSO/SYSTEST_MSO_DASH//TXD/2020-04-20T03:47:47.492Z//AQU/SYSTEST_ACQ_S2I//TTY/AUTH//OID/311e12cc-4561-4b0a-9540-f30d5ef8d744//CLI/IUV5OJDNV5LZG/)";

Matcher m = patternreq.matcher(txn);

   String field = matcher_request.group(1);
   String length = matcher_request.group(3);
   String value = matcher_request.group(7);

Я могу сопоставить первую строку DE-120 и извлечь значения из группы, в которой я нуждаюсь, но не могу выполнить вторую и третью строку.

как мне сопоставить все символы символы между двумя фигурными скобками CHR (.....), поскольку эти значения могут быть любого порядка и в любом шаблоне, пробовали несколько шаблонов, таких как. *? те не работали

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

1 Ответ

0 голосов
/ 20 апреля 2020

Регулярное выражение: (DE\S*)[^[]*\[([^\]]*)\][^(]*\(([^)]*)\)

3 нужные значения находятся в группах 1, 2 и 3.

Объяснение:

(DE\S*)     Capture text starting with `DE` and up to whitespace
[^[]*\[     Skip up to and including `[`
([^\]]*)    Capture everything up to and excluding `]`
\]          Skip `]`, must be present
[^(]*\(     Skip up to and including `(`
([^)]*)     Capture everything up to and excluding `)`
\)          Skip `)`, must be present

См. regex101.com для демонстрации.

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