0

我试图找到一个包含 http 或 // 或 \ 的链接,并在找到后用 href 标记包围,但是当从 xml 读取的数据中逐行读取时。我看到输出与每个字母分开。请请参阅下面的输入和输出..有人可以建议我哪里出错了吗?

 INput:-http://pastebin.com/p9H8GQt4
 Currentoutput:- http://pastebin.com/7428jK63

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

3 回答 3

4

您想使用 XML 解析器,例如

  • 元素
  • lxml
  • 迷你世界

等用于解析任何类型的 XML 文件。自己解析 XML - 尤其是逐行解析很容易出错。特别是正则表达式的使用是被设计破坏的。不要那样做。

聪明点,改用 XML 解析器。

于 2012-11-20T17:00:59.960 回答
2

您正在迭代字符串,而不是文件。

如果要遍历字符串中的行,请使用str.splitlines

>>> text ='''first
... second
... '''
>>> for line in text.splitlines():
...     print(line)
... 
first
second
>>> for char in text:
...     print(char)
... 
f
i
r
s
t


s
e
c
o
n
d

无论如何,我建议您使用 XML 解析器。已经提供了一个,stdlib并且周围还有很多额外的库。

于 2012-11-20T17:02:15.033 回答
0

问题是这条线:

contents = xmlfile.read()

它返回一个字符串;因此迭代对字符进行操作。用 readlines() 替换 read() ,你就有了预期的行。

于 2012-11-20T17:04:28.063 回答