Найти - Пользователи
Полная версия: Склейка нескольких подряд идущих букв
Начало » Python для новичков » Склейка нескольких подряд идущих букв
1 2 3 4
pyOut
Здравствуйте,

Каким образом можно склеить, к примеру, 4 или более подряд идущих буквы если таковые имеются в тексте. Версия Python 2.5.

К примеру есть текст:
Привет форумчане, рад вас всех в и д е т ь на этом форуме.

Нужно получить на выходе:
Привет форумчане, рад вас всех видеть на этом форуме.
pasaranax
Не понял, тебе надо убрать пппооодддрядд идущие буквы или пробелы внутри с л о в а? Если второе, то как ты собираешься отделять от таких слов стоящие рядом с ними союзы и другие однобуквенные слова?
pyOut
pasaranax, не важно на союзы, главное склеить. Не убрать пппооодддрядд идущие буквы, а “убрать” пробелы внутри с л о в а.
Evgen
Если нужно тупо удалить все пробелы из строки, то в чём проблема?

str = "q w r t e"
str = str.replace(" ", "")
Ed
Вот, что у меня получилось:
line = "A привет ф о р у м ч а н е , рад и вас всех в и д е т ь на э т о м форуме.".decode("utf-8")

result = ''
for part in line.split():
if len(part) > 1:
part = " %s " % part
result = "%s%s" % (result, part)

print result.replace(" ", " ")
Выводит это: “A привет форумчане, рад и вас всех видеть на этом форуме.”

Если союз будет рядом с таким растянутым словом, то его прилепит к слову.
pasaranax
Ed +1
а я себе регулярками весь мозг изъел )
sypper-pit
похоже придётся еще и правописание проверить…
sypper-pit
Ed ты красавчег если честно мне нравится твой вариант :), правда у меня ошибку выдаёт :)
Python 2.6.4 (r264:75708, Oct 26 2009, 08:23:19) [MSC v.1500 32 bit (Intel)] on
win32
Type "help", "copyright", "credits" or "license" for more information.
>>> line = "A привет ф о р у м ч а н е , рад и вас всех в и д е т ь на э т о м форуме.".decode("utf-8")
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
File "E:\python264\lib\encodings\utf_8.py", line 16, in decode
return codecs.utf_8_decode(input, errors, True)
UnicodeDecodeError: 'utf8' codec can't decode byte 0xaf in position 2: unexpected code byte
>>>
на юниксах так же:
> python
Python 2.5.2 (r252:60911, Dec 12 2008, 00:04:19)
[GCC 4.2.1 20070719 [FreeBSD]] on freebsd7
Type "help", "copyright", "credits" or "license" for more information.
>>> line = "A привет ф о р у м ч а н е , рад и вас всех в и д е т ь на э т о м форуме.".decode("utf-8")
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
File "/usr/local/lib/python2.5/encodings/utf_8.py", line 16, in decode
return codecs.utf_8_decode(input, errors, True)
UnicodeDecodeError: 'utf8' codec can't decode bytes in position 2-3: invalid data
>>>
sypper-pit
по этой причине я убрал декодер и у меня нормально отработало…
>>> line = "A привет ф о р у м ч а н е , рад и вас всех в и д е т ь на э т о м форуме."
>>> result = ''
>>> for part in line.split():
... if len(part) > 1:
... part = " %s " % part
... result = "%s%s" % (result, part)
...
>>> print result.replace(" ", " ")
A привет форумчане, рад и вас всех видеть на этом форуме.
>>>
nezumi
Как-то так:

str = ‘П р и в е т форумчане, рад в а с всех в и д е т ь на этом ф о р у м е .’
lim = 3
char_len = len('ф')

b =
buf =
for i in str.split():
if len(i) > char_len:
if 0 < len(buf) < lim:
b.extend(buf)
elif len(buf) >= lim:
b.append(''.join(buf))
buf =
b.append(i)
else:
buf.append(i)
else:
if len(buf) >= lim:
b.append(''.join(buf))
else:
b.extend(buf)

print str
print ‘ ’.join(b)

Давольно грамоздко, но работает
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