在字符串中查找http或//或\\,并使用href属性进行环绕

时间:2012-11-20 01:33:01

标签: python

我试图找到一个包含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()

2 个答案:

答案 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

除了我愿意打赌我在那里至少有一个明显的f​​encepost错误,并且可能至少有一个可能重叠模式的微妙错误,等等。

答案 1 :(得分:0)

您应该阅读string escape sequencesstring operations上的文档。

if (line.find('http') != -1 or line.find('\\\\') != -1 or line.find('//') != -1):
    line = '<a href="">'+line+'</a>'