Python中的正则表达式

3 投票
4 回答
6487 浏览
提问于 2025-04-16 15:50

我刚开始学习Python,想在Python中运行一段代码。
我写的代码是:

#!/usr/bin/python

import sys
import re

for line in sys.stdin:
    results = re.search('ipAddress=([^&]*])', line)
    if len(results.group(1)) != 0:
        print results.group(1)

需求是从一个字符串中找到IP地址。这个字符串大概是这样的:

blah....ipAddress=173.110.208.118&deviceId

输出结果应该是:173.110.208.118

请告诉我我哪里做错了……

4 个回答

1

如果你担心正则表达式会匹配得太贪心,可以使用这个方法来明确匹配内容,比如 xxx.xxx.xxx.xxx 这样的格式。

>import re
>s = "blah...ipAddress=173.110.208.118&deviceid"
>results = re.search('ipAddress=(\d+\.\d+\.\d+\.\d+)',s)
>results.groups()

('173.110.208.118',)
4

你的输入看起来像是网址查询字符串。不要用正则表达式来解析它,建议使用urlparse.parse_qs或者urlparse.parse_qsl(如果你用的是Python 2.6之前的版本,可以用cgi.parse_qscgi.parse_qsl)。这些函数可以帮你处理很多底层的细节,比如处理网址编码的字符。

下面是使用urlparse.parse_qs的示例代码:

>>> from urlparse import parse_qs
>>> query = parse_qs("ipAddress=173.110.208.118&deviceId=Some%20Id")
>>> query["ipAddress"]
['173.110.208.118']
>>> query["deviceId"]
['Some Id']

urlparse模块中,你还可以找到从完整网址中提取查询字符串的函数。

6

我觉得你那儿多了一个 ]。试试这个:

results = re.search('ipAddress=([^&]*)', line)

撰写回答