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

Любая помощь будет оценена. Я написал регулярное выражение, которое не работает в некоторых крайних случаях. Не уверен, что есть способ справиться с этим. Я пытаюсь извлечь значения, которые имеют 1.1 и 1.2 et c et c. Регулярное выражение, которое я использую: "[1-9]\.[1-9]([^\s]+)" Если я использую его, оно извлекает первые три значения, но 4.1, в котором есть пробел, извлекается только часть. Если я использую "[1-9]\.1.*[(XDX)]$" Он начинает захватывать всю строку.

В настоящее время я написал логи c, которые проверяют MR, разбивают его и помещают в массив, что является очень неэффективным способом.

Дайте мне знать, если вы можете придумать лучшее решение, чем это.

GIBBERISH
1.1CDDAX/SXEVEN MR*XDX  2.1CDDAX/JEROME MR*XDX
3.1CDDAX/SIXM MR*XDX    4.1CDDAX AMX/SIXM MR*XDX
1  OXP EY 31SED W PK3  MEL/REDOOK DEOPRE 31SED21 XO XRXVEL DEF
EXPRESSA VERO IN IIS AETATIBUS, QUAE IAM CONFIRMATAE SUNT. ATQUI 
PERSPICUUM EST HOMINEM E CORPORE ANIMOQUE CONSTARE, 
CUM PRIMAE SINT ANIMI PARTES, SECUNDAE CORPORIS. TUM QUINTUS: 
EST PLANE, PISO, UT DICIS, INQUIT. BONA AUTEM CORPORIS HUIC SUNT, 
QUOD POSTERIUS POSUI, SIMILIORA. ILLA TAMEN SIMPLICIA 

1 Ответ

1 голос
/ 02 апреля 2020

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

(?<!\S)[1-9]\.[1-9](.*?)(?=\s+MR\*XDX|$)

Или,

(?<!\S)[1-9]\.[1-9]((?:(?!\s+MR\*XDX).)+)

Посмотреть это regex # 1 demo или regex # 2 demo

Подробности

  • (?<!\S) - пробел должен стоять перед текущим местоположением или началом строки
  • [1-9]\.[1-9] - ди git от 1 до 9, затем ., а затем снова ди git от 1 до 9
  • (.*?) - Группа захвата 1: любая 0 + символы, отличные от символов разрыва строки, как можно меньше
  • (?=\s+MR\*XDX|$) - .*? прекратит сопоставление до первого появления
    • \s+MR\*XDX - 1+ пробела и затем MR*XDX подстрока
    • | - или
    • $ - конец строки.
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...