正则表达式Python搜索

时间:2015-12-25 07:38:44

标签: python regex

我试图从网页上的源代码中提取一些信息,而我却无法弄清楚如何去做。 部分源代码如下:

<th>Model #:</th>
                                        <td>1561496564</td>
                            </tr>
                                                                                                                                                                   <tr>

我想从&#34; Model#:&#34;开始并一直向上到td&gt;。从那里,我可以删除任何不是数字的东西来获得1561496564。

我无法做到:

modelMatch = re.search('Model[^\n]*', contents)

因为实际的数字在下一行。我也不能做任何不是/,d或&gt;的事情。我以为我可以做[^ \ ^ n ^:^&lt; ^ / ^ t ^ h ^&gt; ^ r] *,但这看起来有点乱。我想知道是否有更好的方式。

对于正则表达式,是否有一种简单的方法可以说,提取直到达到&#34; tr&#34;

的特定短语

非常感谢。

2 个答案:

答案 0 :(得分:1)

您可以通过传递re.MULTILINE参数启用重新排列的多线模式。

但是,对于从网页中提取数据等任务,我建议您使用lxmlpyqueryBeautifulsoup等工具。这些方法会更加简单和优雅。

这是一个使用pyquery模块的例子:

In [1]: import pyquery

In [2]: s = '''<th>Model #:</th>
   ...:                                         <td>1561496564</td>
   ...:                             </tr>'''

In [3]: pyquery.PyQuery(s).find('td').text()
Out[3]: '1561496564'

答案 1 :(得分:0)

试试这个:

$ wget.exe 192.168.109.128:9200

--2015-12-25 13:39:12--  http://192.168.109.128:9200/
Connecting to 192.168.109.128:9200... connected.
HTTP request sent, awaiting response... 200 OK
Length: 328 [application/json]
Saving to: ‘index.html.1’

index.html.1                   100%[====================================================>]     328  --.-KB/s   in 0.009s

2015-12-25 13:39:12 (37.1 KB/s) - ‘index.html.1’ saved [328/328]

Try curl command

$ curl.exe http://192.168.109.128:9200

{
  "status" : 200,
  "name" : "Kali Node",
  "cluster_name" : "kali",
  "version" : {
    "number" : "1.7.1",
    "build_hash" : "b88f43fc40b0bcd7f173a1f9ee2e97816de80b19",
    "build_timestamp" : "2015-07-29T09:54:16Z",
    "build_snapshot" : false,
    "lucene_version" : "4.10.4"
  },
  "tagline" : "You Know, for Search"
}

<强>输出:

import re
content = """<th>Model #:</th>
                                    <td>1561496564</td>
                        </tr>
                                                                                                                                                               <tr>"""

re.search(r".*>(\w+\ #\:)<.*>(\d+)<", content.replace('\n', '')).groups()