嵌套的While和For循环不在python中停止

时间:2017-11-15 01:03:44

标签: python python-2.7 for-loop while-loop

我正在使用Python 2.7程序将Markdown(.md)文件转换为HTML。但是,有一个实例,其中while循环没有正确退出,只是一遍又一遍地循环遍历相同的数字。

def link(line):
    link_list = []
    link_string = ''
    count = 0
    left_bracket = 0
    right_bracket = 0
    left_parenth = 0
    right_parenth = 0
    for char in line:
        link_list.append(char)
    while count < (len(link_list)):
        if link_list[count] == "[":
            left_bracket = count
            for x in link_list[left_bracket+1:]:
                if x == "]":
                    right_bracket = link_list.index(x)
                if x == "(":
                    left_parenth = link_list.index(x)
                if x == ")":
                    right_parenth = link_list.index(x)
                    break
            a_list = link_list[left_bracket+1:right_bracket]
            str1 = ''.join(a_list)
            href_list = link_list[left_parenth+1:right_parenth]
            str2 = ''.join(href_list)
            link_string = link_string + '<a href="' + str2 + '">' + str1 + '</a>'
            count = right_parenth +1
        if link_list[count] != "[":
            link_string = link_string + link_list[count]
            count += 1
    print link_string
link("lorem ipsum [inside bracket](URL LINK), [inside_bracket2](URL2)")

在此功能中,它将Markdown链接格式转换为HTML链接格式。

如果使用下面的参数调用该函数

link("lorem ipsum [inside bracket](URL LINK")

它为您提供正确的输出。但是,当您在字符串中放置多个markdown链接时,while循环和for循环将无法正常运行。

2 个答案:

答案 0 :(得分:0)

下面:

            if x == "]":
                right_bracket = link_list.index(x)
            if x == "(":
                left_parenth = link_list.index(x)
            if x == ")":
                right_parenth = link_list.index(x)
                break

您使用括号/ parenths作为索引,因此您应该直接将x传递给它们。通过使用link_list.index(x),它总是返回它从左边找到的第一个字符,这就是你的循环被卡住的原因。

答案 1 :(得分:0)

或者,您可以使用正则表达式。它将大大减少代码。

The biggest headliners usually perform at the Orpheum Theatre, the <a href="https://en.wikipedia.org/wiki/Overture_Center">Overture Center</a>, <a href="https://en.wikipedia.org/wiki/Breese_Stevens_Field">Breese Stevens Field</a>, the <a href="https://en.wikipedia.org/wiki/Alliant_Energy_Center">Alliant Energy Center</a>, or the UW Theatre on campus.

输出:

session_start();

继续试试Regex101:

https://regex101.com/r/S3oFLH/1