2015-10-30 2 views
0

У меня есть строка Delete File/Folder. Мне нужно нарушить предложение, основанное на /, эквивалентном or.Сплит String в группы

Наконец-то нужно создать две строки из этого типа Delete File как одну строку и Delete Folder как и другую.

Я пробовал очень наивно, когда я проверяю индекс /, а затем формирую строки с кучей условий.

Это несколько раз терпит неудачу, когда у нас есть строка, такая как File/Folder Deleted.


Edit:

Если разделить на / то для случая 1 мы имеем Delete File и Folder. Затем я проверю наличие пробелов в первой строке, а присутствующие пробелы - вторая строка.

Тот, у которого меньше количества пробелов, будет заменен первым элементом последней строки. Это усложняется.

+0

Так что ваш код? И почему вы имеете в виду о * Это несколько раз терпит неудачу, когда у нас есть строка, например «File/Folder Deleted»? * ** Как это происходит? ** PS: Не downvoter. –

+0

try '" Удалить файл/папку ".split ("/")' –

+0

@Borja: Я думаю, что OP попытался это сделать. –

ответ

1

Вы хотите этого? Прокомментируйте, хотите ли вы более обобщенное решение.

lst = your_string.split()[1].split("/") 

finalList=[] 
for i in lst: 
    finalList.append("Delete {0}",i) 

print finalList 

Для строки:

Delete File/Folder 

Выход:

['Delete File', 'Delete Folder'] 
1
st1 = "Do you want to Delete File/Folder" 
st2 = "File/Folder Updated" 

def spl(st): 
    import re 
    li = [] 
    ff = re.search(r'\w+/\w+',st).group() 
    if ff: 
     t = ff.split('/') 
     l = re.split(ff,st) 
     for el in t: 
      if not l[0]: 
       li.append((el + ''.join(l))) 
      else: 
       li.append((''.join(l) + el)) 
    return li 

    for item in st1,st2: 
     print(spl(item)) 

    ['Do you want to Delete File', 'Do you want to Delete Folder'] 
    ['File Updated', 'Folder Updated'] 
+0

Как насчет 'st =" Вы хотите удалить файл/папку? "'? –

+0

да все предложение должно быть сохранено в каждом разбиении вместе с файлом или папкой –

+0

@ Linus_30 ok теперь он выполняет все предложение – LetzerWille

2

В случае Delete File/Folder, продумывая почему слово Delete получает распространяется на оба File и Folder мощь помочь с присущими предположениями мы все интуитивно делаем при лексическом разборе.

Например, он будет разобран между i и l, чтобы вернуть ["Delete File", "Delete FiFolder"].

Похоже, вы хотите разбить строку на слова, основанные на том, где есть пробелы, а затем разбивать каждое слово на основе /, чтобы генерировать новые полные строки.

>>> import itertools 

>>> my_str = "Delete File/Folder" 
>>> my_str = ' '.join(my_str.split()).replace('/ ', '/').replace(' /', '/') # First clean string to ensure there aren't spaces around `/` 
>>> word_groups = [word.split('/') for word in my_str.split(' ')] 
>>> print [' '.join(words) for words in itertools.product(*word_groups)] 
['Delete File', 'Delete Folder'] 
+0

, это не удастся, когда строка str = «Удалить файл/папку» –

+0

Вот что я пытался сделать выше. Сама проблема неоднозначна. Какое поведение вы ожидаете от удаления «Удалить файл/папку», «Удалить файл/папку/каталог», «Удалить файл/Удалить папку/Удалить папки», «Удалить файл или папку»? Вы могли бы попытаться избавиться от пробелов вокруг '/' first - я отредактировал свой ответ, чтобы сделать это. – Colin

+0

большое спасибо! Я могу изменить ваше решение в соответствии с моими требованиями. –

1
str = "Do you want to Delete File/Folder?" 

word = str.split(" ") 

count = str.count("/") 

c = True 

for j in range(0,2*count): 
    for i in word: 
     if("/" in i): 
      words = i.split("/") 

      if c: 
       print words[1], 

      else: 
       print words[0], 

     else: 
      print i, # comma not to separate line 
    c = not c 
    print 

выход

Do you want to Delete File 
Do you want to Delete Folder?