2013-02-21 109 views
1

我需要解析这个字符串,只有一个Python正则表达式。对于每个组我都需要将该值保存在特定的字段中。 问题是,一个或多个参数可能会丢失或者以不同的顺序排列。(即domain 66666 ip nonce,与中间部分缺失)如何用Python中的一个正则表达式解析这个字符串

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(整数) (string)
  • pubvalue=kjiduensofksidoposiw(固定长度字符串)
  • nonce=7896089hujoiuhiuh098h(字符串)

EDIT

这是关于如何字符串可以变化的示例: 123dsf 2014-01-11T06: 49:30.666821 + 00:00谷歌常数12356同步:[192.168.0.1]请求:pubvalue = fggggggeesidoposiw & nonce = 7896089hujoiuhiuh098h

预先感谢您向我展示方式。

+6

当您需要从可变数量的不同项目的字符串中获取变量值的字符串中的值时,它不是一个正则表达式的作业。为什么你需要一个正则表达式? – 2013-02-21 09:22:06

+0

如果字符串不规则,那么通过尝试向其应用一个正则表达式要求麻烦 – 2013-02-21 09:24:03

+0

有关如何解析字符串的方式可能会有所不同,需要更多详细信息。还请提供适应的代码。 – MikeM 2013-02-21 09:42:21

回答

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() 

刚刚与扩展这个正则表达式你需要与其他东西匹配的图案

并且你可以将组放入?,如(?P<ip>pattern)?如果图案不能t匹配的字典中的元素将是None

但注意:这是不是一个好主意,只一个正则表达式来做到这一点。这将是缓慢的(因为回溯和东西)和正则表达式将是漫长而复杂的维护!

+0

谢谢,我不知道有关命名组!这对于将匹配分配给变量有很大帮助! – NoobTom 2013-02-21 09:41:59

+0

所以,看看我编辑的答案:http://www.regular-expressions.info/named.html – tuxtimo 2013-02-21 09:47:52

相关问题