2015-03-09 7 views
-3

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

"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) 

Но я считаю, что это неэффективная часть кода. Особенно, когда нужно обрабатывать очень длинные строки. Любая другая идея ?! уже не путинский путь ?!

+0

Будет 'fixed_str = my_str.replace ("[", "[") .Надеть ("]", "]")' работа? Методы типа '' str' (https://docs.python.org/3/library/stdtypes.html#string-methods) не очень сложны. – Blckknght

+3

Я думаю, что вы можете получить лучший ответ, если попытаетесь написать какой-то код и протестировать его, и задавать вопросы, если он не делает то, что вы ожидаете. –

+0

@Robert: Прежде чем писать код, мне нужно определить его алгоритм и методы. Я уже остановился на этом уровне! – Vynylyn

ответ

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)" 
+0

Похоже, что это работает. Thanq! – Vynylyn

+0

Если вы нашли мой ответ полезным, рассмотрите [принятие его] (http://meta.stackexchange.com/q/5234/179419), нажав на галочку. @Vynylyn –

+0

Странно, что он работает с некоторой частью одной строки, но не влияет на другую часть этой строки. Я несколько раз менял свою строку, но я видел такое же поведение. Но все в порядке и приемлемо. – Vynylyn