2013-10-16 95 views
0

前右查找基於文本號我怎麼可以提取34980和100329從下面的代碼片段使用python:的Python 2.7

<tr id="product_34980" class="even"> 
<tr id="variant_100329" class="variantRow"> 

回答

0

不是最通用的解決方案,但它工作的片段上方:

import re 

html = """ 
    <tr id="product_34980" class="even"> 
    <tr id="variant_100329" class="variantRow"> 
""" 

ids = re.findall(r'id="\w+_(\d+)"', html) 
+0

轉義反斜槓或使用原始字符串。 're.findall'至少需要兩個參數。 – falsetru

+0

你可以修改它以返回完整的字符串:'product_34980'和'variant_100329'? –

+0

@ChuckDickens:當然。請使用此代碼:'re.findall(r'id =「(\ w + _ \ d +)」',html)' – user278064

3

使用filterstr.isdigit,以下每行代碼提取數字。

>>> lines = '''<tr id="product_34980" class="even"> 
... <tr id="variant_100329" class="variantRow"> 
... ''' 
>>> [filter(str.isdigit, line) for line in lines.splitlines()] 
['34980', '100329'] 

UPDATE使用lxml

import lxml.html 

html_string = ''' 
<tr id="product_34980" class="even"> 
<tr id="variant_100329" class="variantRow"> 
''' 

root = lxml.html.fromstring(html_string) 
for tr in root.cssselect('tr.even, tr.variantRow'): 
    print(tr.get('id')) # => product_34980 
    print(tr.get('id').rsplit('_', 1)[-1]) # => 34980 
+0

的片段是小提取物一個完整的html頁面。這些號碼不是網頁上的唯一號碼。我需要弄清楚如何從文本中提取'product_34980'和'variant_100329',以便我可以在Xpath查詢中使用它。 –

+0

@ChuckDickens,我用另一個使用'lxml'的解決方案更新了答案。 – falsetru