[英]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 groups
。 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中執行此操作不是一個好主意。 它將很慢(由於回溯和填充),並且正則表達式的維護時間長而復雜!
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.