Этот ответ в большой степени под влиянием разговора здесь: http://www.tek-tips.com/viewthread.cfm?qid=1395151&page=3
ALTER SYSTEM ENABLE RESTRICTED SESSION;
begin
for x in (
select Sid, Serial#, machine, program
from v$session
where
machine <> 'MyDatabaseServerName'
) loop
execute immediate 'Alter System Kill Session '''|| x.Sid
|| ',' || x.Serial# || ''' IMMEDIATE';
end loop;
end;
я пропускаю сессии уничтожения, происходящие на сервере базы данных, чтобы не избавляться от соединений Oracle с собой.
Вот пошаговый подход (но в верхнем регистре фактически используется строковый метод - намного проще!):
rex = re.compile(r'\W+')
result = rex.sub(' ', strarg).upper()
где strarg
- строковый аргумент ( не используйте имена эти теневые встроенные или стандартные библиотечные модули, пожалуйста ).
s = "$$$aa1bb2 cc-dd ee_ff ggg."
re.sub(r'\W+', ' ', s).upper()
# ' AA1BB2 CC DD EE_FF GGG '
Используется ли _ пунктуация?
re.sub(r'[_\W]+', ' ', s).upper()
# ' AA1BB2 CC DD EE FF GGG '
Не нужны начальные и конечные пробелы?
re.sub(r'[_\W]+', ' ', s).strip().upper()
# 'AA1BB2 CC DD EE FF GGG'
result = rex.sub(' ', string) # this produces a string with tons of whitespace padding
result = rex.sub('', result) # this reduces all those spaces
Потому что вы допустили опечатку и забыли использовать rex_s для второго вызова. Кроме того, вам нужно заменить хотя бы один пробел обратно, иначе вы закончите тем, что любой пробел из нескольких пробелов станет вовсе не пробелом, а не пробелом из одного пробела.
result = rex.sub(' ', string) # this produces a string with tons of whitespace padding
result = rex_s.sub(' ', result) # this reduces all those spaces
Обязательно ли использовать регулярные выражения? Считаете ли вы, что должны делать это в одну строку?
>>> import string
>>> s = "stuff . // : /// more-stuff .. .. ...$%$% stuff -> DD"
>>> s2 = ''.join(c for c in s if c in string.letters + ' ')
>>> ' '.join(s2.split())
'stuff morestuff stuff DD'