Нарезка строки регулярным выражением в re Python
Как, желательно дополнив или несильно изменив имеющееся регулярное выражение, заставить его правильно работать?
Необходимо использовать только re.split!!!
import re
def words_discharge(text):
return re.split(r'[^\w-]+', text)
print(words_discharge('''Он --- серо-буро-малиновая редиска!!
>>>:->
А не кот.
www.kot.ru'''))
в таком виде ответ выглядит:
['Он', '---', 'серо-буро-малиновая', 'редиска', '-', 'А', 'не', 'кот', 'www', 'kot', 'ru']
а нужно, чтобы было:
['Он', 'серо-буро-малиновая', 'редиска', 'А', 'не', 'кот', 'www', 'kot', 'ru']
попытки добавить исключение знаку дефис: '-(?!/w)', '-(?=\w)' ни к чему хорошему не приводят :( Заранее благодарю за любую помощь!
Ответы (4 шт):
Автор решения: Сергей Кох
→ Ссылка
Можно поменяв split на findall
import re
def words_discharge(text):
return re.findall(r'(?!-)[\w-]+', text)
print(words_discharge('''Он --- серо-буро-малиновая редиска!!
>>>:->
А не кот.
www.kot.ru'''))
------------------------------
['Он', 'серо-буро-малиновая', 'редиска', 'А', 'не', 'кот', 'www', 'kot', 'ru']
Автор решения: Asuranay
→ Ссылка
print(re.findall(r'[а-яА-Яa-zA-Z]+', u'''Он --- серо-буро-малиновая редиска!!
>>>:->
А не кот.
www.kot.ru'''))
['Он', 'серо', 'буро', 'малиновая', 'редиска', 'А', 'не', 'кот', 'www', 'kot', 'ru']
Автор решения: Алексей Р
→ Ссылка
Вариант со сплитом. Режет по двум и более подряд небуквенным символам ИЛИ по единичному небуквенному, кроме дефиса.
import re
def words_discharge(text):
return re.split(r'\W{2,}|[^\w-]', text)
print(words_discharge('''Он --- серо-буро-малиновая редиска!!
>>>:->
А не кот.
www.kot.ru'''))
['Он', 'серо-буро-малиновая', 'редиска', 'А', 'не', 'кот', 'www', 'kot', 'ru']
Автор решения: Wiktor Stribiżew
→ Ссылка
Просто удалите все элементы списка, состоящие целиком из дефисов:
def words_discharge(text):
return [x for x in re.split(r'[^\w-]+', text) if x.replace('-','')]
import re
def words_discharge(text):
return [x for x in re.split(r'[^\w-]+', text) if x.replace('-','')]
print(words_discharge('''Он --- серо-буро-малиновая редиска!!
>>>:->
А не кот.
www.kot.ru'''))
# => ['Он', 'серо-буро-малиновая', 'редиска', 'А', 'не', 'кот', 'www', 'kot', 'ru']