这与如何在每 n 个字符或最近的前一个空格处拆分字符串类似的问题,但是,与我基于标题所期望的相反,如果只有一个没有任何空格的长单词,该解决方案将不起作用.
所以我需要一个正则表达式,它将一个字符串拆分为每行最大字符数(如果需要,可以多次),并向后看n 个字符以查找可能的空格(如果找到则中断,否则为最大长度)?
编辑 1:例如,最大行长 30 个字符和 15 个字符的向后空格查找:
Loremipsumissimplydummytextoftheprinting and typeing 行业。
该句子的第一个单词长度为 32 个字符。所以输出应该是:
Loremipsumissimplydummytextoft # Line has length of 30 char
he printing and typesetting # Cut before the word at otherwise 30 char
industry.
所以第一个单词应该在第 30 个字符之后被强制剪切,因为没有空格。
剩余的字符串在单词“industry”之前的长度为 28(或短划线为 29),因此在第 30 个字符的位置有一个单词,因此该解决方案在 15 个字符范围内查找前一个空格。那条线在“行业”一词之前被打破。
编辑 2:文本的第二个示例:
Loremipsumissimplydummytextoftheprinting and typeing 行业。Loremipsumis 只是印刷和排版行业的虚拟文本。Loremipsumissimplydummytextoftheprinting and typeing 行业。Loremipsumis 只是印刷和排版行业的虚拟文本。
应该输出:
Loremipsumissimplydummytextoft
he printing and typesetting
industry. Loremipsumis simply
dummytext ofthe printing and
typesetting industry.
Loremipsumissimplydummytextoft
he printing and typesetting
industry. Loremipsumis simply
dummytext ofthe printing and
typesetting industry.
此正则表达式的用例是将长字符串格式化为可读文本,强制执行最大行长度,并且行以字符而不是空格开头。
可选要求:在最初发布后,我在编辑 1 中添加了该示例时,我还添加了一个可选要求,即在下一行的开头添加一个破折号“-”字符,如果一个单词以最大行长度被剪切。我现在将其从示例中删除,并将其作为单独的可选要求添加到此处。
所以一个可选的要求:如果一行在最大长度而不是空格处被中断,那么应该在该行的末尾附加一个破折号(而不是在下一行的开头,正如我最初描述的那样)。
Loremipsumissimplydummytextoft- # Line length 30+1 char with an appended a dash
he printing and typesetting # Cut before the word at otherwise 30 char
industry.