Вам нужно искать пробегов символов, которые либо только слова-символы, или ни слова-символы, ни пробелы:
>>> s = "I'm feeling sad today."
>>> rgx = re.compile(r'(\w+|[^\w\s]+)')
>>> rgx.findall(s)
['I', "'", 'm', 'feeling', 'sad', 'today', '.']
EDIT:
Для захвата схваток, регулярное выражение должно быть более сложным. Он должен использовать утверждение look-behind, чтобы проверить, что апостроф предшествует словесному символу (иначе он будет ошибочно соответствовать цитируемым словам). Вот базовое решение:
>>> s = "I'm feeling 'sad' today."
>>> rgx = re.compile(r"((?<=\w)'\w+|\w+|[^\w\s]+)")
>>> rgx.findall(s)
['I', "'m", 'feeling', "'", 'sad', "'", 'today', '.']
Есть некоторые краевые случаи, с которыми это не может иметь дело. Например, существуют некоторые транслитерированные иностранные слова (например, Qur'an
), которые содержат встроенные апострофы. И тогда, конечно, есть такие имена, как O'Connor
и их владельцы, такие как O'Connor's
, а также нестандартные сокращения, такие как His 'n' Hers
.
А как насчет 'чувство'? – Kasramvd
Я сделал редактирование – NeptuneGamer