2016-06-08 3 views
0

Я пытаюсь реплицировать определенные строки в файле и вырезать определенные подстроки из определенных реплик. Каждая строка является строкой, которую я получить через fileobject.readline()python: выборочно разделять и комбинировать буквенно-цифровые строки в файле

Input: 
Line1 : a -> b,c; 
Line2 : d -> e,f,g; 
Line3 : h -> i,j; 
Line4 : k -> l; 

Output: 
Line1 : a -> b; 
Line2 : a -> c; 
Line3 : d -> e; 
Line4 : d -> f; 
Line5 : d -> g; 
Line6 : h -> i; 
Line7 : h -> j; 
Line8 : k -> l; 

В выходе я хочу повторить входной линии (одна строка) для нескольких линий (несколько строк) выборочно. Количество реплик/дубликатов: Для п «» символов в строке, реплицировать линии (п + 1) раз, где , п начинается с 1, Строки положить в репликах/дубликатов: реплики 1: substring1 -> substring2 [0] replica 2: substring1 -> substring2 [1]

и так далее.

Может ли кто-нибудь помочь мне с вышеуказанной проблемой?

+0

Ваш вопрос непонятен. Пожалуйста, добавьте еще несколько материалов. –

+0

Я пересмотрел свой вопрос. это помогает? –

ответ

2

Насколько я понимаю ваш вопрос, вы можете просто заменить символы «,» на шаблон «\ w». Это больше похоже на трюк, чем на решение.

Я написал простую функцию, которая может «реплицировать» строку на несколько строк, следуя вашим требованиям. Обратите внимание, что это только для 1 строки.

def replicateALine(line): 
    regex = re.search('\w -> ', line) 
    if regex: 
     line= line.replace(',', ';\n' + regex.group(0)) 
    return line 

print replicateALine('a -> b,c,d;') 
print replicateALine('e -> b;') 

выход:

a -> b; 
a -> c; 
a -> d; 
e -> b; 

Update: Потому что \ ш будет охватывать только 1 символ, если вам нужно, чтобы покрыть такие вещи, как snu_1opbb_1, попробуйте '\ ш +

+0

Когда я дал «буквенно-цифровые символы» -> Я не получаю правильный вывод, исходная часть строки разделяется. print (replicateALine ('snu_1opbb_1 -> snuop1_1, suop2_1;')) print (replicateALine ('snu_2opbb_1 -> snuop2_2, suop1_2')) Выход: snu_1opbb_1 -> snuop1_1; 1 -> suop2_1; snu_2opbb_1 -> snuop2_2; 1 -> suop1_2 –

+0

Это потому, что '\ w' в re не покрывает буквенно-цифровые специальные строки? –

+0

Ах, да, потому что \ w будет охватывать только 1 символ, если вам нужно покрыть такие вещи, как snu_1opbb_1, попробуйте '\ w +' – dangsonbk

0
s = "a -> b,c;" 
s = s.replace(";","") 
a = s.split(" -> ") 
b = a[1].split(',') 
for i in range(len(b)): 
    print('{} -> {};'.format(a[0],b[i])) 

Подробнее о разложении Python и других строковых методах here. Это только первый пример, вы сможете решить другое самостоятельно.

Смежные вопросы