2015-09-27 46 views
-2

我在一個變量中獲取頁面的源代碼。從變量中獲取python中日誌文件的值

<!DOCTYPE html><html><head><title>Intro</title></head><body><a href='/name=t1.304.log'>Test</a>. </body></html> 

我想從上面的行中提取t1.304.log。 我正在使用打印log_name.split(".log",1)[0],但它是我第一個完整的部分。

+0

你可以詳細說明你的意思嗎?你想提取任何看起來像「something.log」的字符串嗎? – Leo

+0

是以.log結尾的任何字符串。它只會來一次 – Aquarius24

+0

「只有一次」,你的意思只是第一個匹配的子字符串?或者你想確保字符串只包含一個匹配? – Leo

回答

1

如果您只是想快速做到這一點,您可以使用記錄的split()函數here

log_name.split("'")[1].split("=")[1] 

但是這樣做在一個可重用的方式尋找到一個工具,像beautifulsoup

編輯以

根據您的意見,你可以這樣做補充:

print(log_name.split(".log",1)[0].rsplit("=",1)[1] + ".log") 
+0

即不是字符串,我是從源代碼取值 – Aquarius24

+0

進口的urllib URL =「http://www.google.com」 日誌文件=了urllib.urlopen(URL) 日誌=日誌文件.read() logfile = logfile.split(「。log」,1)[0] .rsplit(「=」,1)[1] +「.log」) – Aquarius24

0
import re 
    st = " <!DOCTYPE html><html><head><title>Intro</title></head><body><a href='/name=t1.304.log'>Test</a>. </body></html>" 

    mo = re.search('(t\S*log)', st) 

    print(mo.group()) 

輸出

t1.304.log 
0

你可以使用正則表達式(與re模塊),假設你的字符串變量爲page_source

>>> import re 
>>> re.findall('.*=(.*.log)', page_source) 
['t1.304.log'] 

這給你所有匹配「* .LOG」子列表。

但是,請注意,顯然不建議使用正則表達式來解析HTML - 請參閱this discussion

實際上,不要這樣做,請使用alecxe's answer

3

爲什麼不用一個HTML parser解析HTML?

>>> from bs4 import BeautifulSoup 
>>> data = "<!DOCTYPE html><html><head><title>Intro</title></head><body><a href='/name=t1.304.log'>Test</a>. </body></html>" 
>>> BeautifulSoup(data).a["href"].split("=")[-1] 
't1.304.log' 
相關問題