我需要解析这个字符串,在Python中只有一个正则表达式。对于每个组,我需要将值保存在特定字段中。 问题是一个或多个参数可能丢失或者顺序不同。(即domain 66666 ip nonce
,中间部分缺失)
3249dsf 2013-02-10T06:44:30.666821+00:00 domain constant 66666 sync:[127.0.0.1] Request: pubvalue=kjiduensofksidoposiw&change=09872534&value2=jdmcnhj&counter=232&value3=2&nonce=7896089hujoiuhiuh098h
我需要指定:
time=2013-02-10T06:45:30.666821+00:00
(常数格式)domain=domain
(字符串)code=66666
(整数)ip=127.0.0.1
(字符串)pubvalue=kjiduensofksidoposiw
(固定长度的字符串)nonce=7896089hujoiuhiuh098h
(字符串)修改
这是关于字符串如何变化的示例: 123dsf 2014-01-11T06:49:30.666821 + 00:00 google constant 12356 sync:[192.168.0.1]要求:pubvalue = fggggggeesidoposiw& nonce = 7896089hujoiuhiuh098h
提前感谢您给我指路。
答案 0 :(得分:1)
使用一个正则表达式解析整个字符串可能不是一个好主意。
但我认为解决方案是使用named groups
(请参阅:Named groups on Regex Tutorial。
Named groups
(?P<nameofgroup>bla)
所以你可以匹配例如ip:
import re
str = "3249dsf 2013-02-10T06:44:30.666821+00:00 domain constant 66666 sync:[127.0.0.1] Request: pubvalue=kjiduensofksidoposiw&change=09872534&value2=jdmcnhj&counter=232&value3=2&nonce=7896089hujoiuhiuh098h"
print re.search("\[(?P<ip>\d{1,3}\.\d{1,3}\.\d{1,3}\.\d{1,3})\]", str).groupdict()
只需使用您需要的模式扩展此正则表达式以匹配其他内容。
并且您可以在群组的parantheses之后放置?
来使群组成为可选群组,例如:(?P<ip>pattern)?
。如果模式无法匹配,则dict中的元素将为None
。
但请注意:仅一个正则表达式 一个好主意。这将是缓慢的(因为回溯和东西)和正则表达将是漫长而复杂的维护!