我试图找到一个包含http或//或\的链接,并在找到后用href标签环绕,是否有人对如何做到这一点有任何想法
INput:-http://pastebin.com/p9H8GQt4
sanity_results = sanity_results.replace('\n','<br>\n')
return sanity_results
def main ():
resultslis=[]
xmlfile = open('results.xml','r')
contents = xmlfile.read()
testresults=getsanityresults(contents)
#print testresults
for line in testresults:
#print line
line = line.strip()
#print line
line = re.sub(r'(http://[^\s]+|//[^\s]+|\\\\[^\s]+)', r'<a href="\1">\1</a>', line)
print line
resultslis.append(line)
print resultslis
if __name__ == '__main__':
main()
答案 0 :(得分:2)
您可能希望使用regular expressions:
line = re.sub(r'(http://[^\s]+)', r'<a href>\1</a>', line)
这只是处理http://
案件。要处理所有这三个,请执行以下操作:
line = re.sub(r'(http://[^\s]+|//[^\s]+|\\\\[^\s]+)', r'<a href>\1</a>', line)
在控制台中使用该正则表达式以确保它能够执行您想要的操作,但它似乎可以执行您your posted input data所要求的操作。正如我在评论中提到的,一般来说,如果要自动链接文本,您需要弄清楚分隔符可以结束链接。
同时,您确定问题规范是否正确?通常,您不希望这样:
<a href>http://foo/bar</a>
......但是这个:
<a href="http://foo/bar">http://foo/bar</a>
要做到这一点,只需将sub
替换表达式更改为r'<a href="\1">\1</a>'
。
你也可以用字符串函数编写整个东西,但除了简单的情况之外,实际上这比学习正则表达式要困难得多。例如,上述单行的等价物是这样的:
index = 0
while index is not None:
index = min(line.find(pattern, index) for pattern in ('http:', '//', '\\\\'))
if index == -1:
break
space = line.find(' ', index)
if space == -1:
space = None
line = line[:index] + '<a href>' + line[index:space] + '</a>' + line[space:]
index = space
除了我愿意打赌我在那里至少有一个明显的fencepost错误,并且可能至少有一个可能重叠模式的微妙错误,等等。
答案 1 :(得分:0)
您应该阅读string escape sequences和string operations上的文档。
if (line.find('http') != -1 or line.find('\\\\') != -1 or line.find('//') != -1):
line = '<a href="">'+line+'</a>'