2010-01-21 19 views
14

Скажем, у меня есть предложение:Matching все слова, кроме одного

Я хорошая покупка и плохой мальчик слишком

Как выбрать каждое слово, кроме мальчика в этом предложении, используя регулярные выражения?

+3

На каком языке/условиях? И что вы подразумеваете под «выбрать каждое слово»? В отдельности? Вместе? –

+3

Язык? Желаемый выход? –

+2

используя регулировка. – pokrate

ответ

33

Вы можете использовать негативный взгляд за:

\w+\b(?<!\bboy) 

Или негативный взгляд вперед так не все поддерживают отрицательный внешний вид позади

(?!boy\b)\b\w+ 

Вы можете прочитать о негативном прогностическим here

+0

правильный ответ проверен здесь http://www.gskinner.com/RegExr/ – pokrate

5

Какой язык? Почему вы хотите использовать регулярное выражение?

answer = yourString.Replace("boy", ""); 
+0

-1 Это глупый ответ. – cletus

+6

Глупый, потому что? Спецификация не ясна, и это решение соответствует одной из интерпретаций. –

+2

Обратите внимание, что OP говорит «слово». Это будет соответствовать частичным. Поэтому, если вы хотите игнорировать «верх», и вы это заменили, вы также попали бы «остановились». Таким образом, этот ответ глупо, потому что он не является * ненужной * заменой, которая не решает проблему, игнорирует проблему границ слов и просто вводит больше проблем. – cletus

1

Заменитель мальчик ничего ... в Perl, который был бы:

s/boy //g 
+0

Еще лучше, удалите 'boy' (т.е. мальчик + пробел) –

+0

Совершенно верно, я обновил ответ соответственно ... –

3
/\b(?!boy)\S+/g 
+0

Это было точно что мне нужно :) –

8

Try:

\b(?!boy\b).*?\b 

, что означает:

  • нулевой ширины слово разрыва (\b)
  • Это ISN за ним следует "мальчик" и другое слово сломать;
  • , за которым следуют любые символы не-жадным способом;
  • Вверх до другого слова перерыв.

Примечание: слово перерыв соответствует началу строки, конец строки и любой переход от слова (число, буквы или подчеркивания) не-символ слова или наоборот.

+0

Неверный ответ, явно ничего не выбирая. – pokrate

2

Если вы используете «мальчик» в качестве разделителя, вы получите оставшиеся части. Вы можете использовать их в качестве клавиш выбора.

>>> re.split("boy","I am a good buy and bad boy too") 
['I am a good buy and bad ', ' too'] 
Смежные вопросы