0

http、//、または\を含み、見つかったらhrefタグで囲むリンクを見つけようとしていますが、xmlから読み取ったデータから1行ずつ読み取ると、出力が文字ごとに分割されます。以下の入力と出力を参照してください。誰かが私がどこで間違っているのかを提案できますか?

 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パーサーを使用したい

  • elementree
  • 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すでに1つを提供しており、周りにはたくさんの追加ライブラリがあります。

于 2012-11-20T17:02:15.033 に答える
0

問題は次の行です。

contents = xmlfile.read()

文字列を返します。したがって、反復は文字に対して作用します。read() を readlines() に置き換えると、目的の行が得られます。

于 2012-11-20T17:04:28.063 に答える