我正在使用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循环将无法正常运行。
答案 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: