2013-02-21 21 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

相關問題