繁体   English   中英

如何使用一个正则表达式解析Python中的此字符串

[英]How to parse with one regular expression this string in Python

我需要使用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常量12356同步:[192.168.0.1]请求:pubvalue = fggggggeesidoposiw&nonce = 7896089hujoiuhiuh098h

预先感谢您为我提供帮助。

使用一个正则表达式解析整个字符串可能不是一个好主意。 但是我认为解决方案是使用named groups (请参阅: Regex教程上的 Named groupsNamed 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)? 如果无法匹配模式,则dict中的元素将为None

但请注意:仅在一个 Regex中执行此操作不是一个好主意。 它将很慢(由于回溯和填充),并且正则表达式的维护时间长而复杂!

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM