2010-09-04 3 views
3

Я пытаюсь разобрать фразу и исключить общие слова.Regex negation - разбор слов

Например, во фразе «как мир поворачивается» я хочу исключить общие слова «как» и «the» и вернуть только «мир» и «поворот».

(\ W + (?! | а))

не работает. Обратная связь оценена.

+0

Не могли бы вы быть немного более конкретно о том, что не работает? Не соответствует ли оно некоторым словам, которые вы хотите, чтобы они соответствовали друг другу? Соответствует ли это некоторым словам, которые должны потерпеть неудачу? Можете ли вы привести несколько примеров, показывающих, где это не удается, и объяснить, что вы хотели вместо этого? –

ответ

2

опережение должно прийти первый:

 
(\b(?!(the|as)\b)\w+\b) 

Я также добавил границы слов, чтобы убедиться, что он соответствует только целым словам, в противном случае он потерпит неудачу, чтобы соответствовать полному слову «как», но это будет успешно соответствовать букве "s" этого слова.

Возможно, вы также захотите рассмотреть, что подходит \w, и если это соответствует вашим потребностям. Если вы ищете слова на английском языке, вас, вероятно, интересуют буквы, но не цифры, и вы можете указать некоторые знаки препинания, которые исключаются \w, например апострофы. Вы могли бы попробовать что-то вроде этого вместо (Rubular):

/(\b(?!(?:the|as)\b)[a-z'-]+\b)/i 

Чтобы соответствовать слова более точно на человеческом языке вы могли бы рассмотреть возможность использования естественного языка библиотеки синтаксического анализа вместо регулярных выражений.

1

Вы должны использовать границы слов только для соответствия целым словам. Либо с упреждением утверждением:

(\b(?!(?:the|as)\b)\w+\b) 

Или с Двойник за утверждением:

(\b\w+\b(?<!\b(?:the|as)))