Ответ 1
import textwrap
lines = textwrap.wrap(text, 20)
# then use either
lines[0]
# or
'\n'.join(lines)
Я хочу вырезать длинный текст после символов 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'
Каков самый простой способ сделать это?
import textwrap
lines = textwrap.wrap(text, 20)
# then use either
lines[0]
# or
'\n'.join(lines)
Вы можете использовать str.rsplit()
, чтобы удалить все после последнего пробела остатка:
example[:20].rsplit(' ', 1)[0]
Это ограничивает разделение на первое пространство справа, а индекс [0]
принимает все, что было разделено перед этим пространством.
Если пробелов нет, это просто возвращает исходную (нарезанную) строку.
Упрощенный два других ответа, но только для удовольствия, с регулярным выражением:
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
''
''