Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/kotlin/3.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长字符串到x个字符长行的对齐文本_Python_Regex - Fatal编程技术网

Python长字符串到x个字符长行的对齐文本

Python长字符串到x个字符长行的对齐文本,python,regex,Python,Regex,作为作业,我必须输入一长串文本,然后输出,每行长度为x个字符。 我尝试使用的当前方法不起作用,我也不明白为什么,它只是陷入了一个无限循环 如果您能帮我调试代码,我将不胜感激 代码: words='Etiam rhoncus。时间之美,调味品之美,自由之美,平等之美。Nam quam nunc,blandit vel,luctus pulvinar,hendrerit id,lorem。这是一个非常重要的时刻。不要为威尼斯人的自由而浪费生命。纳拉姆·奎斯·安特。我坐在那里,或者我坐在那里。杜伊斯·

作为作业,我必须输入一长串文本,然后输出,每行长度为x个字符。 我尝试使用的当前方法不起作用,我也不明白为什么,它只是陷入了一个无限循环

如果您能帮我调试代码,我将不胜感激

代码:

words='Etiam rhoncus。时间之美,调味品之美,自由之美,平等之美。Nam quam nunc,blandit vel,luctus pulvinar,hendrerit id,lorem。这是一个非常重要的时刻。不要为威尼斯人的自由而浪费生命。纳拉姆·奎斯·安特。我坐在那里,或者我坐在那里。杜伊斯·利奥。塞德·弗林斯·莫里斯坐在阿梅特·尼布旁边。大矢状背根。他是一名妇女,利奥·埃吉特·比本杜姆·索达莱斯,奥古斯·维利特·库苏斯·努克,她是一名自由的孕妇。乌云乌云乌云乌云乌云乌云乌云乌云乌云乌云乌云乌云乌云乌云乌云乌云乌云乌云乌云乌云乌云乌云乌云乌云乌云乌云乌云乌云乌云乌云乌云。前庭purus quam,权杖,软垫,非软垫,metus。酒后驾车。乌尔里西斯我是亨德雷特·弗林利亚。虎口浮雕和肘部浮雕同侧前庭;在一对连续的拉齐尼亚中。'.split()
最大长度=60
行=“”
行=[]
用文字表示:

如果len(line)+len(word)您的主要问题是您正在用更多的空格替换字母空白字母,并删除其两侧的字母。所以你的线路永远不会变长,循环也永远不会终止


将字母放在它们自己的组中,并在替换字符串中添加引用(例如,\1)。

斯蒂芬的回答给你的信息比我给你的要多一些

对未来的建议:

  • 找出什么循环没有终止。e、 g.向可疑循环添加打印语句。每个人都有不同的性格
  • 打印出循环条件的键值,并检查它们是否朝向正确的方向。在本例中,是nline的长度。如果不是每次都增加,你需要担心它不会终止
  • 在拥有两个循环出口(循环上的条件和返回)之前,请仔细考虑,这会使对行为进行推理变得更加困难

  • 您想要什么输出?为什么不偶尔插入一些打印来调试自己呢?:-)顶部的长字符串需要输出到具有最大字符长度的60个字符的正版文本,如左边所示:我已经调试了超过2个小时,如果线必须是60个字符长,则找不到我的问题,那么行中断将插入到单词中间的大部分位置,而不是插入到空白处。你觉得这样行吗?还是只需要在空白处换行?这似乎让我更进一步,谢谢,但它似乎也在用:
    replacement='\g'+('*(s+1))
    你可以用这个来保留最后一组:
    replacement=r'\g'+'*(s+1)+r'\g'
    请注意,没有理由将替换的空格本身放入一个组中,因此此代码段要求模式中只有两个组。引导问题:您的程序是否输出输入文本的所有单词?
    words = 'Etiam rhoncus. Maecenas tempus, tellus eget condimentum rhoncus, sem quam semper libero, sit amet adipiscing sem neque sed ipsum. Nam quam nunc, blandit vel, luctus pulvinar, hendrerit id, lorem. Maecenas nec odio et ante tincidunt tempus. Donec vitae sapien ut libero venenatis faucibus. Nullam quis ante. Etiam sit amet orci eget eros faucibus tincidunt. Duis leo. Sed fringilla mauris sit amet nibh. Donec sodales sagittis magna. Sed consequat, leo eget bibendum sodales, augue velit cursus nunc, quis gravida magna mi a libero. Fusce vulputate eleifend sapien. Vestibulum purus quam, scelerisque ut, mollis sed, nonummy id, metus. Nullam accumsan lorem in dui. Cras ultricies mi eu turpis hendrerit fringilla. Vestibulum ante ipsum primis in faucibus orci luctus et ultrices posuere cubilia Curae; In ac dui quis mi consectetuer lacinia.'.split()
    max_len = 60
    line = ''
    lines = []
    for word in words:
        if len(line) + len(word) <= max_len:
            line += (' ' + word)
        else:
            lines.append(line.strip())
            line = ''
    
    import re
    def JustifyLine(oline, maxLen):
        if len(oline) < maxLen:
            s = 1
            nline = oline
            while len(nline) < maxLen:
                match = '\w(\s{%i})\w' % s
                replacement = ' ' * (s + 1)
                nline = re.sub(match, replacement, nline, 1)
                if len(re.findall(match, nline)) == 0:
                    s = s + 1
                    replacement = s + 1
                elif len(nline) == maxLen:
                    return nline
        return oline
    
    for l in lines[:-1]:
        string = JustifyLine(l, max_len)
        print(string)