Найти - Пользователи
Полная версия: Обрезать строку по пробелам.
Начало » Python для новичков » Обрезать строку по пробелам.
1 2
Jeck290
Есть вот такая строка

s = “”“Строка строка Строка строка Строка строка Строка, строка Строка== строка Строка строка”“”

нужно укоротить строку вставляя каждый третий пробел символ конца строки , на выходе должна быть вот такая картина

Строка строка Строка
строка Строка строка
Строка, строка Строка==
строка Строка строка

посоветуйте алгоритм…
SoT
Ну например вот так :
#!/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

Вызывай из командной строки, у меня работает.
P.s. Символ пробела на символ перевода строки можно заменять с помощью replace, но у меня почему то не получилось
Jeck290
Да спасибо то что нужно.
dimy44
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)
SoT
Шикарное решение ! а можно его немного прокомментировать ? я не очень понимаю что принимает mo.group(1)
Frog-king
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)
py.user.next
dimy44
new_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'
>>>

dimy44
Дельное замечание. Но откуда там пробел в репр-представлении перед новой строкой? У меня нет его (2.6.2)
py.user.next
dimy44
Но откуда там пробел в репр-представлении перед новой строкой?
я продублировал пробелы в исходной строке, чтобы подчеркнуть, что при подстановке заменяется группа пробелов
Mozart
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)
This is a "lo-fi" version of our main content. To view the full version with more information, formatting and images, please click here.
Powered by DjangoBB