前右查找基於文本號我怎麼可以提取34980和100329從下面的代碼片段使用python:的Python 2.7
<tr id="product_34980" class="even">
<tr id="variant_100329" class="variantRow">
前右查找基於文本號我怎麼可以提取34980和100329從下面的代碼片段使用python:的Python 2.7
<tr id="product_34980" class="even">
<tr id="variant_100329" class="variantRow">
不是最通用的解決方案,但它工作的片段上方:
import re
html = """
<tr id="product_34980" class="even">
<tr id="variant_100329" class="variantRow">
"""
ids = re.findall(r'id="\w+_(\d+)"', html)
使用filter
和str.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
的片段是小提取物一個完整的html頁面。這些號碼不是網頁上的唯一號碼。我需要弄清楚如何從文本中提取'product_34980'和'variant_100329',以便我可以在Xpath查詢中使用它。 –
@ChuckDickens,我用另一個使用'lxml'的解決方案更新了答案。 – falsetru
轉義反斜槓或使用原始字符串。 're.findall'至少需要兩個參數。 – falsetru
你可以修改它以返回完整的字符串:'product_34980'和'variant_100329'? –
@ChuckDickens:當然。請使用此代碼:'re.findall(r'id =「(\ w + _ \ d +)」',html)' – user278064