Вы можете заменить совпадения следующего регулярного выражения пустыми строками.
r'(?<=[^!.,>$%&-][!.,>$%&-])[!.,>$%& -]+(?<! )'
(Для удобства чтения я уменьшил набор специальных символов, как показано.)
Начало ваш движок!
Если бы строка была:
I like this city very much!!! $%& It is because it contains many good food..! $ % Unfortunately,,, I need to go back home tomorrow. . ->
, была бы возвращена следующая строка:
I like this city very much! It is because it contains many good food. Unfortunately, I need to go back home tomorrow.
Python механизм регулярных выражений выполняет следующие операции.
(?<= : begin a positive lookbehind
[^!.,>$%&-] : match any character other than those shown in the
character class
[!.,>$%&-] : match any character in the character class
) : end positive lookbehind
[!.,>$%& -]+ : match any character in the character class
(?<! ) : negative lookbehind matches a space
Обратите внимание, что
[!.,>$%& -]+(?<! )
можно заменить на:
[!.,>$%& -]*[!.,>$%&-]