Сложное регулярное выражение - это возможно? - PullRequest
0 голосов
/ 28 октября 2011

Для следующих строк я пытаюсь извлечь 'mainline', если строка содержит mainline, или число в конце, если она не содержит mainline. Я использую Java.

Например, для следующих строк я хочу только цифры в конце

Solaris10NBngp-bwm1.1.X     // want 1.1.x
Solaris10NBbytel2.0.0.0x    // want 2.0.0.0x
Solaris10NBbwm1.2.X         // want 1.2.X
Solaris10NBoam_bwm1.4.0.X   // want 1.4.0X
Solaris10NBoam1.7.X         // want 1.7.X

Примеры Mainline:

Solaris10NBngp-bwm_mainline // want mainline
LinuxNBdaypass_mainline     // want mainline
LinuxNBngp_mainline         // want mainline

Возможно ли это с помощью регулярных выражений, и если да, кто-нибудь знает, как это сделать? : -)

Ответы [ 5 ]

2 голосов
/ 28 октября 2011
Solaris10NBngp-bwm1.1.X     // want 1.1.x 
Solaris10NBbytel2.0.0.0x    // want 2.0.0.0x 
Solaris10NBbwm1.2.X         // want 1.2.X 
Solaris10NBoam_bwm1.4.0.X   // want 1.4.0X 
Solaris10NBoam1.7.X         // want 1.7.X

Для вышеуказанных входов

expectedString = yourString.replaceAll("[^.]+(\\d+\\.)","$1");
0 голосов
/ 28 октября 2011

Попробуйте это регулярное выражение:

/(mainline)$|(\d+\..*)\s*/

Если он находит mainline в конце строки, тогда переменная $1 будет содержать значение mainline. Если он найдет номер версии, то будет заполнена переменная $2, $1 будет нулевым / пустым.

0 голосов
/ 28 октября 2011

Попробуйте это регулярное выражение

([0-9.]+x) +.*$

NB Предполагая, что комментарии являются частью строки

В противном случае

[0-9.]+x)$
0 голосов
/ 28 октября 2011

Посмотрите, работает ли это выражение

(\d\.)+\d?X$
0 голосов
/ 28 октября 2011

Если строки всегда начинаются с Solaris10NB, попробуйте следующее выражение: Solaris10NB[\w\-]+(\d.*).

Затем извлеките первую группу, используя Matcher#group(1).

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