Java regex для исключения определенных строк из большей

Я ударял головой об это в течение некоторого времени теперь: Я хочу получить все [a-z]+[0-9]? последовательности символов, исключая строки такой как sin|cos|tan и т.д. Так сделавший мою regex домашнюю работу следующий regex должен работать:

(?:(?!(sin|cos|tan)))\b[a-z]+[0-9]?

Поскольку Вы видите, что я использую отрицательное предвидение наряду с чередованием - \b после того, как закрывающая скобка негруппы фиксации очень важна, чтобы не соответствовать in из sin и т.д. regex имеет смысл, и на самом деле я попробовал его RegexBuddy и Java как целевая реализация и получаю требуемый результат, но он не работает с помощью Java объекты Шаблона и Matcher! Какие-либо мысли?

удачи

5
задан Alan Moore 3 February 2010 в 10:54
поделиться

3 ответа

\ b находится не в том месте. Он будет искать границу слова, в которой не было sin / cos / tan до . Но граница сразу после у любого из них будет буква в конце, поэтому она должна быть границей конца слова, чего не может быть, если следующим символом будет a-z.

Кроме того, отрицательный просмотр вперед (если бы он работал) исключал такие строки, как cost , что, я не уверен, вам нужно, если вы просто отфильтровываете ключевые слова.

Я предлагаю:

\b(?!sin\b|cos\b|tan\b)[a-z]+[0-9]?\b

Или, проще говоря, вы могли бы просто сопоставить \ b [a-z] + [0-9]? \ B и затем отфильтровать строки в списке ключевых слов. Вам не всегда нужно делать все в регулярном выражении.

6
ответ дан 14 December 2019 в 08:50
поделиться

Итак, вы хотите [az] + [0-9]? (последовательность как минимум из одной буквы, за которой может следовать цифра), , если эта последовательность букв не похожа на одну из sin cos tan ?

\b(?!(sin|cos|tan)(?=\d|\b))[a-z]+\d?\b

результатов:

cos   - no match
cosy  - full match
cos1  - no match
cosy1 - full match
bla9  - full match
bla99 - no match
1
ответ дан 14 December 2019 в 08:50
поделиться

Я забыл экранировать \ b для java, поэтому \ b должно быть \\ b , и теперь это работает. Ура

0
ответ дан 14 December 2019 в 08:50
поделиться
Другие вопросы по тегам:

Похожие вопросы: