如何在Python中用一个正则表达式解析这个字符串

2024-10-03 04:36:18 发布

您现在位置: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 constant 12356 sync:[192.168.0.1]请求:pubvalue=fgggggeesidoposiw&nonce=7896089hujoiuh098h

提前谢谢你给我带路。你知道吗


Tags: 字符串ip参数顺序requestdomainsyncchange
1条回答
网友
1楼 · 发布于 2024-10-03 04:36:18

使用一个正则表达式来解析整个字符串可能不是一个好主意。 但我认为解决方法是使用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)?。如果模式无法匹配,dict中的元素将是None。你知道吗

但请注意:只在一个Regex中执行此操作不是一个好主意。它会很慢(因为回溯之类的原因),而且Regex会很长而且维护起来很复杂!你知道吗

相关问题 更多 >