2015-11-21 4 views
-1

У меня есть строка, называемая, скажем, "I will kill you today" или что-то в этом роде. Я хочу совместить все слова, которые не являются «убитыми» или «волевыми». Я считаю, что отрицательные классы символов не будут работать, потому что это слово. Я посмотрел на негативные взгляды, но я не совсем понимаю, как их использовать.Отрицательное соответствие труб с регулярными выражениями

Другими словами, когда я входной

"I will kill you today" 

Я хочу

['I', 'you', 'today'] 

, когда я прохожу метод findall.

+0

ARE YOU специально интересует соответствие слов (лексем, разделенных белым пространства)? Потому что тогда вы могли бы просто применить логическое NOT к результату соответствия регулярному регулярному выражению. (Или просто спросите слово в словах, где 'words' является' set' строк.) – 5gon12eder

ответ

0

Здесь вы можете использовать оператора чередования.

re.findall(r'\b(?:[kw]ill)\b|\b(\w+)\b', s) 

Пример:

>>> import re 
>>> s = "I will kill you today" 
>>> [i for i in re.findall(r'\b(?:[kw]ill)\b|\b(\w+)\b', s) if i] 
['I', 'you', 'today'] 
+0

Я хотел бы использовать выражение независимо от того, какое слово я использую. Соответствует ли это выражение, например, «сегодня» и «вы», если вы изменяете код? – JAW

+0

ya, ты это проверил? –

0

Это не похоже, что вам нужно регулярное выражение для этого. Просто split() строка и отфильтровать слова, которые вы не заинтересованы в:

s = "I will kill you today" 
result = [word for word in s.split() if word.lower() not in ('kill', 'will')] 

Результат:

>>> result 
['I', 'you', 'today'] 
+0

Мне нужно использовать регулярное выражение ... – JAW

+0

По какой причине? – TigerhawkT3

+0

Собственно, это часть URL-адреса. Мне нужно определить URL-адрес, но я решил использовать другой пример для простоты. – JAW

Смежные вопросы