пытаюсь написать правильное регулярное выражение, помогите пожалуйста - PullRequest
0 голосов
/ 22 марта 2011

вот небольшое регулярное выражение, которое я написал:

\\b(?!N|O)(?!Y{1}|N{1}).+_

это регулярное выражение должно соответствовать любой последовательности символов, которые начинаются с новой строки или пробела (поэтому \ b), не включая слова NOT исимволы Y или N в начале

((?! N | O) (?! Y {1} | N {1})) и заканчиваются подчеркиванием (отсюда _).

Моя проблема в том, что я хочу, чтобы это было неохотно (я думаю, что это правильный термин).значение: в следующем тексте:

FILE_sldkf aTEMP_sdlkf

это будет соответствовать FILE и aTEMP по-разному, сейчас я получаю

FILE_sldkf aTEMP_ 

вместе как одно совпадение.есть идеи?спасибо!

Ответы [ 3 ]

0 голосов
/ 22 марта 2011

\b[^NY\s](?!\w*NOT\w*)\w+?_, я полагаю, это регулярное выражение, которое вы ищете .. Вы должны добавить еще один escape-символ для Java ..

Образец;

FILE_sldkf_ aTEMP_sdlkf NOT_ NER_FG YER_ 343_4434_ FileNOT_ fil_

Совпадения:

FILE_ aTEMP 343_ fil_

0 голосов
/ 22 марта 2011

Иногда полезно проверить исключения отдельно и не упаковывать все в одно регулярное выражение.

Поэтому я бы сделал что-то вроде этого (псевдокод):

if (string matches "\\b(\\w+_)") then
    matched = extract matched part for () group 1
    if (matched not matches "^(N|Y|NOT)") then  ...
0 голосов
/ 22 марта 2011

Я думаю, вы хотите что-то похожее на:

\ б [^ NY]. *? _

Что означает: граница слова (\ b - двойная, как ваш код), за которой следует символ, отличный от N или Y ([^ NY] - который включает слово NOT), за которым следует любой символ (.) 0 или более раз (*) жадно (? - неохотно) с последующим подчеркиванием (_)

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