Python中的正则表达式
我刚开始学习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_qs或cgi.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)