Подтвердить что ты не робот

Вырезание строки после x символов в пробеле в python

Я хочу вырезать длинный текст после символов x, но я не хочу вырезать слово посередине, я хочу вырезать последние пробелы перед символами x:

'This is a sample text'[:20]

дает мне

'This is a sample tex'

но я хочу

'This is a sample'

Другой пример:

'And another sample sentence'[:15]

дает мне

'And another sam'

но я хочу

'And another'

Каков самый простой способ сделать это?

4b9b3361

Ответ 1

import textwrap
lines = textwrap.wrap(text, 20)
# then use either
lines[0]
# or
'\n'.join(lines)

Ответ 2

Вы можете использовать str.rsplit(), чтобы удалить все после последнего пробела остатка:

example[:20].rsplit(' ', 1)[0]

Это ограничивает разделение на первое пространство справа, а индекс [0] принимает все, что было разделено перед этим пространством.

Если пробелов нет, это просто возвращает исходную (нарезанную) строку.

Ответ 3

Упрощенный два других ответа, но только для удовольствия, с регулярным выражением:

import re

r = re.compile('.{,20}(?<! )(?= |\Z|\A)')
for s in ('This is a sample text',
          'abcdefghijklmnopqrstuvwxyz  ',
          'ABCDEFGHIJKLMNOPQRSTUVWXYZ',
          'This is 1 first sample text  ',
          'This is 1 again sample text',
          'A great blank          here',
          'Another blank     here',
          'A short text',
          '  little indent',
          '                      great indent',
          'ocean',
          '!',
          ''):
    print ('-----------------------\n'
           " ....5...10...15...20\n"
           '%r\n%r'
           % (s, r.match(s).group() )   )

результат

-----------------------
 ....5...10...15...20
'This is a sample text'
'This is a sample'
-----------------------
 ....5...10...15...20
'abcdefghijklmnopqrstuvwxyz  '
''
-----------------------
 ....5...10...15...20
'ABCDEFGHIJKLMNOPQRSTUVWXYZ'
''
-----------------------
 ....5...10...15...20
'This is 1 first sample text  '
'This is 1 first'
-----------------------
 ....5...10...15...20
'This is 1 again sample text'
'This is 1 again'
-----------------------
 ....5...10...15...20
'A great blank          here'
'A great blank'
-----------------------
 ....5...10...15...20
'Another blank     here'
'Another blank'
-----------------------
 ....5...10...15...20
'A short text'
'A short text'
-----------------------
 ....5...10...15...20
'  little indent'
'  little indent'
-----------------------
 ....5...10...15...20
'                      great indent'
''
-----------------------
 ....5...10...15...20
'ocean'
'ocean'
-----------------------
 ....5...10...15...20
'!'
'!'
-----------------------
 ....5...10...15...20
''
''