Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/314.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 在一定数量的字符后拆分字符串_Python_Python 3.x_String_Split - Fatal编程技术网

Python 在一定数量的字符后拆分字符串

Python 在一定数量的字符后拆分字符串,python,python-3.x,string,split,Python,Python 3.x,String,Split,我有一个很长的字符串,希望在一定数量的字符后将其拆分。我已经这样做了: if len(song.lyrics) > 2048: string1 = string[:2048] string2 = string[2049:] 问题是,有时它会在文本中间断裂,而我不想这样做。是否有办法在达到字符限制之前获取最后一个换行符并在那里进行换行? 谢谢这会给你你想要的结果吗?如果没有,请提供一个具有预期输出的示例字符串 重新导入 字符限制=2048 对于re.finditer(r.{

我有一个很长的字符串,希望在一定数量的字符后将其拆分。我已经这样做了:

if len(song.lyrics) > 2048:
    string1 = string[:2048]
    string2 = string[2049:]
问题是,有时它会在文本中间断裂,而我不想这样做。是否有办法在达到字符限制之前获取最后一个换行符并在那里进行换行?
谢谢

这会给你你想要的结果吗?如果没有,请提供一个具有预期输出的示例字符串

重新导入
字符限制=2048
对于re.finditer(r.{,%s}(?:\n |$)'%CHARACTER_LIMIT,string,re.DOTALL)中的m:
打印(m.group(0))

这是否提供了您想要的结果?如果没有,请提供一个具有预期输出的示例字符串

重新导入
字符限制=2048
对于re.finditer(r.{,%s}(?:\n |$)'%CHARACTER_LIMIT,string,re.DOTALL)中的m:
打印(m.group(0))

找到长度限制左侧的换行符索引,然后使用它进行拆分

if len(song.lyrics) > 2048:
    index = string[:2048].rfind('\n')
    string1 = string[:index]
    string2 = string[index+1:]

例如:

>>> s = 'aaaaaaa\nbbbbbbbbbbbbbbbb\nccccccc\ndddddddddddddddd'
>>> limit = 31   #                        ↑
>>> index = s[:limit].rfind('\n')
>>> index
24
>>> s1,s2 = s[:index],s[index+1:]
>>> s1
'aaaaaaa\nbbbbbbbbbbbbbbbb'
>>> s2
'ccccccc\ndddddddddddddddd'
>>>

找到长度限制左侧的换行符索引,然后使用它进行拆分

if len(song.lyrics) > 2048:
    index = string[:2048].rfind('\n')
    string1 = string[:index]
    string2 = string[index+1:]

例如:

>>> s = 'aaaaaaa\nbbbbbbbbbbbbbbbb\nccccccc\ndddddddddddddddd'
>>> limit = 31   #                        ↑
>>> index = s[:limit].rfind('\n')
>>> index
24
>>> s1,s2 = s[:index],s[index+1:]
>>> s1
'aaaaaaa\nbbbbbbbbbbbbbbbb'
>>> s2
'ccccccc\ndddddddddddddddd'
>>>

请注意,在某些边缘情况下,此操作不会返回文本。如果一个文本块>2048且没有换行符,则该文本块将在此场景中删除。是的,谢谢。但我想知道这是怎么回事哈哈。你能把一个链接或者其他东西放到可以解释的地方吗?这是多么令人耳目一新啊:)这个解决方案使用的是正则表达式。您可以在此处阅读有关python包的更多信息:。表达式正在搜索一个通配符
,用于一定数量的重复{MINIMUM\u number,MAXIMUM\u number},后跟换行符
\n
或EOF锚点
$
。搜索换行符或EOF的命令被分组在一个非捕获组中:
(?:)
,这意味着在下面的.group()调用中输出不可用。最后一个问题。使用这个解决方案,它给了我一个字符串,在最后一个字符串中没有任何内容。一切正常后,我得到最后一个空字符串。有没有办法让它不露出来?我已经有了一个临时解决方案,但不是优雅的哈哈。是的,这是因为没有最小匹配,它能够匹配EOF锚,这是一个零宽度字符。您可以通过添加一个最小匹配项来解决此问题,例如:
{1,%s}
而不是
{,%s}
——还有其他方法,但这应该会满足您的需要。请注意,在某些边缘情况下,此操作不会返回文本。如果一个文本块>2048且没有换行符,则该文本块将在此场景中删除。是的,谢谢。但我想知道这是怎么回事哈哈。你能把一个链接或者其他东西放到可以解释的地方吗?这是多么令人耳目一新啊:)这个解决方案使用的是正则表达式。您可以在此处阅读有关python包的更多信息:。表达式正在搜索一个通配符
,用于一定数量的重复{MINIMUM\u number,MAXIMUM\u number},后跟换行符
\n
或EOF锚点
$
。搜索换行符或EOF的命令被分组在一个非捕获组中:
(?:)
,这意味着在下面的.group()调用中输出不可用。最后一个问题。使用这个解决方案,它给了我一个字符串,在最后一个字符串中没有任何内容。一切正常后,我得到最后一个空字符串。有没有办法让它不露出来?我已经有了一个临时解决方案,但不是优雅的哈哈。是的,这是因为没有最小匹配,它能够匹配EOF锚,这是一个零宽度字符。您可以通过添加一个最小匹配项来解决这个问题,例如:
{1,%s}
而不是
{,%s}
——还有其他方法,但这应该能满足您的需要。