如何在Python中将字符串截断为75个字符?
这是在JavaScript中完成的:
var data="saddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddsaddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddsadddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddd"
var info = (data.length > 75) ? data.substring[0,75] + '..' : data;
Run Code Online (Sandbox Code Playgroud)
Mar*_*tos 375
info = (data[:75] + '..') if len(data) > 75 else data
Run Code Online (Sandbox Code Playgroud)
小智 120
更短:
info = data[:75] + (data[75:] and '..')
Run Code Online (Sandbox Code Playgroud)
nei*_*eil 95
更简洁:
data = data[:75]
Run Code Online (Sandbox Code Playgroud)
如果它少于75个字符,则不会有任何变化.
Bor*_*per 70
如果您使用的是Python 3.4+,则可以使用textwrap.shorten标准库:
折叠并截断给定文本以适合给定宽度.
首先,文本中的空格被折叠(所有空格都被单个空格替换).如果结果适合宽度,则返回.否则,从末尾删除足够的单词,以便剩余的单词加上占位符适合宽度:
Run Code Online (Sandbox Code Playgroud)>>> textwrap.shorten("Hello world!", width=12) 'Hello world!' >>> textwrap.shorten("Hello world!", width=11) 'Hello [...]' >>> textwrap.shorten("Hello world", width=10, placeholder="...") 'Hello...'
Ris*_*nha 27
对于Django解决方案(问题中未提及):
from django.utils.text import Truncator
value = Truncator(value).chars(75)
Run Code Online (Sandbox Code Playgroud)
看看Truncator的源代码来理解这个问题:https: //github.com/django/django/blob/master/django/utils/text.py#L66
关于使用Django截断: Django HTML截断
你可以使用这个单线程:
data = (data[:75] + '..') if len(data) > 75 else data
Run Code Online (Sandbox Code Playgroud)
正则表达式:
re.sub(r'^(.{75}).*$', '\g<1>...', data)
Run Code Online (Sandbox Code Playgroud)
长字符串被截断:
>>> data="11111111112222222222333333333344444444445555555555666666666677777777778888888888"
>>> re.sub(r'^(.{75}).*$', '\g<1>...', data)
'111111111122222222223333333333444444444455555555556666666666777777777788888...'
Run Code Online (Sandbox Code Playgroud)
较短的字符串永远不会被截断:
>>> data="11111111112222222222333333"
>>> re.sub(r'^(.{75}).*$', '\g<1>...', data)
'11111111112222222222333333'
Run Code Online (Sandbox Code Playgroud)
这样,你也可以"剪切"字符串的中间部分,在某些情况下更好:
re.sub(r'^(.{5}).*(.{5})$', '\g<1>...\g<2>', data)
>>> data="11111111112222222222333333333344444444445555555555666666666677777777778888888888"
>>> re.sub(r'^(.{5}).*(.{5})$', '\g<1>...\g<2>', data)
'11111...88888'
Run Code Online (Sandbox Code Playgroud)
这只是在:
n = 8
s = '123'
print s[:n-3] + (s[n-3:], '...')[len(s) > n]
s = '12345678'
print s[:n-3] + (s[n-3:], '...')[len(s) > n]
s = '123456789'
print s[:n-3] + (s[n-3:], '...')[len(s) > n]
s = '123456789012345'
print s[:n-3] + (s[n-3:], '...')[len(s) > n]
123
12345678
12345...
12345...
Run Code Online (Sandbox Code Playgroud)
如果满足以下条件,则此方法不使用任何方法:
data[:75] + bool(data[75:]) * '..'
limit = 75
info = data[:limit] + '..' * (len(data) > limit)
Run Code Online (Sandbox Code Playgroud)
小智 5
info = data[:min(len(data), 75)
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
222389 次 |
| 最近记录: |