Truncate a string without ending in the middle of a word

后端 未结 8 1817
无人共我
无人共我 2020-12-12 17:17

I am looking for a way to truncate a string in Python that will not cut off the string in the middle of a word.

For example:

Original:          \"This is          


        
8条回答
  •  旧巷少年郎
    2020-12-12 18:00

    There are a few subtleties that may or may not be issues for you, such as handling of tabs (Eg. if you're displaying them as 8 spaces, but treating them as 1 character internally), handling various flavours of breaking and non-breaking whitespace, or allowing breaking on hyphenation etc. If any of this is desirable, you may want to take a look at the textwrap module. eg:

    def truncate(text, max_size):
        if len(text) <= max_size:
            return text
        return textwrap.wrap(text, max_size-3)[0] + "..."
    

    The default behaviour for words greater than max_size is to break them (making max_size a hard limit). You can change to the soft limit used by some of the other solutions here by passing break_long_words=False to wrap(), in which case it will return the whole word. If you want this behaviour change the last line to:

        lines = textwrap.wrap(text, max_size-3, break_long_words=False)
        return lines[0] + ("..." if len(lines)>1 else "")
    

    There are a few other options like expand_tabs that may be of interest depending on the exact behaviour you want.

提交回复
热议问题