Форум сайта python.su
Есть вот такая строка
s = “”“Строка строка Строка строка Строка строка Строка, строка Строка== строка Строка строка”“”
нужно укоротить строку вставляя каждый третий пробел символ конца строки , на выходе должна быть вот такая картина
Строка строка Строка
строка Строка строка
Строка, строка Строка==
строка Строка строка
посоветуйте алгоритм…
Офлайн
Ну например вот так :
#!/usr/bin/python # -*- coding: utf-8 -*- s = u"слово1 слово2 слово3 слово4 слово5 слово6 слово7 слово8 слово9" k = 0 for i in range( len(s) ) : if s[i] == u" " : k = k + 1 if k == 3 : s = s[:i] + u"\n" + s[(i+1):] k = 0 print s
Офлайн
Да спасибо то что нужно.
Офлайн
import re text = "qwe rty uia sdf ghj kzx cv vb nm gh gh fb hgf" new_text = re.sub(r'(\S+\s+\S+\s+\S+)\s+', lambda mo: '%s\n' % mo.group(1), text) print(new_text)
Офлайн
Шикарное решение ! а можно его немного прокомментировать ? я не очень понимаю что принимает mo.group(1)
Офлайн
s = 'Строка строка Строка строка Строка строка Строка, строка Строка== строка Строка строка' s_as_list = s.split(' ') for i, index in enumerate(range(3, len(s_as_list), 3)): s_as_list.insert(index+i, '\n') print ' '.join(s_as_list)
Офлайн
dimy44new_text = re.sub(r'(\S+\s+\S+\s+\S+)\s+', lambda mo: '%s\n' % mo.group(1), text)
>>> import re >>> >>> text = "qwe rty uia sdf ghj kzx cv vb" >>> >>> new_text = re.sub(r'(\S+\s+\S+\s+\S+)\s+', r'\1\n', text) >>> >>> print(new_text) qwe rty uia sdf ghj kzx cv vb >>> print(repr(new_text)) 'qwe rty uia\nsdf ghj kzx\ncv vb' >>>
Отредактировано py.user.next (Сен. 16, 2013 14:28:47)
Офлайн
Дельное замечание. Но откуда там пробел в репр-представлении перед новой строкой? У меня нет его (2.6.2)
Отредактировано dimy44 (Сен. 16, 2013 20:02:02)
Офлайн
dimy44я продублировал пробелы в исходной строке, чтобы подчеркнуть, что при подстановке заменяется группа пробелов
Но откуда там пробел в репр-представлении перед новой строкой?
Отредактировано py.user.next (Сен. 16, 2013 21:15:46)
Офлайн
py.user.next
new_text = re.sub(r'(\S+\s{1}\S+\s{1}\S+)\s{1}', lambda mo: '%s\n' % mo.group(1), text)
Отредактировано Mozart (Сен. 18, 2013 22:21:40)
Офлайн