Проходя через очень длинные струны, перемещая персонажей
Задача состоит в том, чтобы читать и искать в текстовых файлах, ища определенные символы (знаки препинания, такие как {}
или же ()
и т.д.) добавляя пространство вокруг них, когда это необходимо:
"D'ya ken[John]Peel with" >>>>>> "D'ya ken [John] Peel with"
# Blank Spaces've been added before and after brackets
Так вот о чем я думал:
OpenedSet = '{[('
ClosedSet = ')]}'
Obj = "D'ya ken[John]Peel with"
LObj = list (Obj)
for Idx, Chr in enumerate (LObj):
if Chr in OpenedSet:
LObj.insert (Idx, ' ')
elif Chr in ClosedSet:
LObj.insert (Idx+1, ' ')
else:
continue
#Changing things back into normal ...
NewObj = ''.join (LObj)
Но я считаю, что это неэффективный кусок кода. Особенно, когда нужно обрабатывать очень длинные строки. Любая другая идея?! еще какой-нибудь питонский путь?!
1 ответ
Решение
Вы могли бы использовать re
модуль для регулярных выражений.
import re
paren_regex = '(\(\w+\))'
square_bracket_regex = '(\[\w+\])'
curly_bracket_regex = '(\{\w+\})'
Вы можете использовать re.findall
и цикл для добавления пробелов.
my_string = 'Hello(John)this is(Phil)'
matches = re.findall(paren_regex, my_string) # find all regex matches
for match in matches:
my_string = my_string.replace(match, ' {0} '.format(match)) # replace the existing
my_string = re.sub(' +', ' ', my_string).rstrip() # remove duplicate spaces
my_string
тогда будет:
"Hello (John) this is (Phil)"