-1

我正在尝试找到一个包含 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()
4

2 回答 2

2

您可能希望为此使用正则表达式

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)

在控制台中使用该正则表达式以确保它执行您想要的操作,但它似乎按照您发布的输入数据的要求执行操作。正如我在评论中提到的,一般来说,如果你想自动链接文本,你需要弄清楚哪些分隔符可以结束链接。

同时,您确定问题规范是正确的吗?通常,您不希望这样:

<a href>http://foo/bar</a>

… 但是这个:

<a href="http://foo/bar">http://foo/bar</a>

为此,只需将sub替换表达式更改为r'<a href="\1">\1</a>'.

你也可以用字符串函数来写整个东西,但除了简单的情况外,这实际上比学习正则表达式要困难得多。例如,上面的 one-liner 的等价物是这样的:

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

除了我愿意打赌我至少有一个明显的栅栏错误,并且可能至少有一个带有可能重叠模式的细微错误,等等。

于 2012-11-20T01:54:59.200 回答
0

您应该阅读有关字符串转义序列字符串操作的文档。

if (line.find('http') != -1 or line.find('\\\\') != -1 or line.find('//') != -1):
    line = '<a href="">'+line+'</a>'
于 2012-11-20T01:36:54.963 回答