如果字符串包含逗号(,)空格和其他字符,如何制作正则表达式(

时间:2017-05-20 14:22:48

标签: python html css regex scrapy

我有字符串:

<td class="cspan">Proximates</td>\n\t<td style="text-align:left">Total lipid (fat)\n\t\t\n\t\t\n\t\t</td>\n\t\t\n\t\t<td>g</td>\n\t\t\n\t\t\t<td style="text-align:right;">78.30</td>

我需要一个正则表达式。我尝试了很多像这样的人:

Total lipid\(fat\)\\n\\t\\t\\n\\t\\t\\n\\t\\t\<\/td\>\\n\\t\\t\\n\\t\\t\<td\>g\<\/td\>\\n\\t\\t\\n\\t\\t\\t\<td style\=\"text\-align\:right\;\"\>(.*?)\<\/td\>

我还有另一个字符串:

<td style="text-align:left">Vitamin C, total ascorbic acid\n\t\t\n\t\t\n\t\t</td>\n\t\t\n\t\t<td>mg</td>\n\t\t\n\t\t\t<td style="text-align:right;">0.0</td>

我尝试了许多正则表达式,也就是:

Vitamin C\, total ascorbic acid\\n\\t\\t\\n\\t\\t\\n\\t\\t\<\/td\>\\n\\t\\t\\n\\t\\t\<td\>mg\<\/td\>\\n\\t\\t\\n\\t\\t\\t\<td style\=\"text\-align\:right\;\"\>(.*?)\<\/td\>

我的第三个字符串是:

<td style="text-align:left">Vitamin B-12\n\t\t\n\t\t\n\t\t</td>\n\t\t\n\t\t<td>\xb5g</td>\n\t\t\n\t\t\t<td style="text-align:right;">0.07</td>

我已经尝试过这样一个,更像是这样:

data = re.search('Vitamin B\-12\\n\\t\\t\\n\\t\\t\\n\\t\\t\<\/td\>\\n\\t\\t\\n\\t\\t\<td\>µg\<\/td\>\\n\\t\\t\\n\\t\\t\\t\<td style\=\"text\-align\:right\;\"\>(.*?)\<\/td\>',tb)

从这些字符串我试图得到的数据是:

    第一个字符串中的
  1. 是:78.30
  2. 来自第二名:0.0
  3. 来自第三名:0.07
  4. 我需要正则表达式,就像我上面写的只做了一些小改动,因为我知道我错过了什么

1 个答案:

答案 0 :(得分:3)

正如您所发现的,XML(HTML)和正则表达式混合不好。但是,使用BeautifulSoup

时,这个问题非常简单

<强>代码:

soup = BeautifulSoup(row)
print soup.findAll('td')[-1].text

测试代码:

data = (
    """
    <td class="cspan">Proximates</td>
    <td style="text-align:left">Total lipid (fat)


    </td>
    <td>g</td>
        <td style="text-align:right;">78.30</td>
    """,
    """
    <td style="text-align:left">Vitamin C, total ascorbic acid


    </td>
    <td>mg</td>
    <td style="text-align:right;">0.0</td> "
    """,
    """
    <td style="text-align:left">Vitamin B-12


    </td>
    <td>\xb5g</td>
    <td style="text-align:right;">0.07</td> "
    """,
)


from bs4 import BeautifulSoup
for row in data:
    soup = BeautifulSoup(row)
    print soup.findAll('td')[-1].text

<强>结果:

78.30
0.0
0.07