簡體   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