Java регулярное выражение, чтобы исключить определенные строки из большего - PullRequest
5 голосов
/ 03 февраля 2010

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

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

Как вы видите, я использую отрицательную перспективу вместе с чередованием - \b после закрывающей скобки для неперехватывающей группы имеет решающее значение, чтобы избежать совпадения с in из sin и т. Д. Регулярное выражение имеет смысл, и как вопрос На самом деле, я попробовал это с RegexBuddy и Java в качестве целевой реализации и получил желаемый результат, но он не работает с использованием объектов Java Matcher и Pattern! Есть мысли?

ура

Ответы [ 3 ]

6 голосов
/ 03 февраля 2010

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

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

Я предлагаю:

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

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

1 голос
/ 03 февраля 2010

Таким образом, вы хотите [a-z]+[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
0 голосов
/ 03 февраля 2010

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

...