Проходя через очень длинные струны, перемещая персонажей

Задача состоит в том, чтобы читать и искать в текстовых файлах, ища определенные символы (знаки препинания, такие как {} или же ()и т.д.) добавляя пространство вокруг них, когда это необходимо:

"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)"
Другие вопросы по тегам