簡體   English   中英

如何使用 Python re.split() 制作 ['key=value', 'k=v', 'k=v'] 的列表(不是 dict)?

[英]How can I use Python re.split() to make a list (not dict) of ['key=value', 'k=v', 'k=v']?

前言:我不是正則表達式專家

我正在創建一個 Python 腳本,它將解析日志消息並在日志消息中創建一個鍵/值對列表。

我有一個如下所示的輸入字符串:

UUID = 00b544de-2c89-4e40-a39f-1ef60f0273ca版本= 3df1e743-439e-49a5-BF12-ba49e54c2a9d創建時間= 2020年2月26日04:09:02.152073 lastUpdateTime = 2020年2月26日04:09:02.152073 NAME =我的對象名稱注釋=創建我的對象類型=自定義customType = SCT returnValueOnAccess =真timeFormatString = YYYY分鍾= 49最大值= 20000 specialCharacter = X specialType = BigAndSmall numberOfBigDigits = 0 numberOfSmallDigits = 4

我想使用這個字符串並創建一個這樣的列表:

[
    'uuid=00b544de-2c89-4e40-a39f-1ef60f0273ca', 
    'version=3df1e743-439e-49a5-bf12-ba49e54c2a9d', 
    'creationTime=2020-02-26 04:09:02.152073', 
    ..., 
    'numberOfSmallDigits=4'
]

我不要字典。

我想使用 re.split(),我只是想不出正確的正則表達式模式來完成我的任務。

我們還有其他代碼庫將使用我們提出的正則表達式模式來完成相同的任務,否則我會以更 Pythonic 的方式來完成。

如您所見,這些值可以包含空格、單詞/數字字符和標點符號。

我嘗試了多種不同的前瞻、后視以及中間的每個正則表達式模式。

這是我的沙箱中一些不起作用的代碼:

log = 'uuid=00b544de-2c89-4e40-a39f-1ef60f0273ca version=3df1e743-439e-49a5-bf12-ba49e54c2a9d creationTime=2020-02-26 04:09:02.152073 lastUpdateTime=2020-02-26 04:09:02.152073 name=My Object Name comment=create my object type=Custom customType=SCT returnValueOnAccess=true timeFormatString=YYYY min=49 max=20000 specialCharacter=X specialType=BigAndSmall numberOfBigDigits=0 numberOfSmallDigits=4'
print(re.split(r'(?:(?<=\s)|(?<=\A))([^\s=]+)=(.*?)(?=(?:\s[^\s=]+=|$))', log))
print(re.split(r' +(?=\w+)(?==+)', log))
print(re.split(r'\s+', log))
print(re.split(r'.*(?=\w*)(?==)', log))
print(re.split(r'\w*(?=\w*)(?==)', log))
print(re.split(r'\w*\s*(?=\w*)(?==)', log))
print(re.split(r'(\w+|\s+)+(?=\w*)(?==)', log))
print(re.split(r'(?=(?:\w*)(?:=))+(\w+|\s+)+', log))
print(re.split(r'(?:(?:\w*)(?:=))+(\w+|\s+)+(?:(?:\w*)(?:=))', log))
print(re.split(r'(?<=\=)(.*?)(?=\w+=)', log))
print(re.split(r'((?<=\=).*?(?=\w+=))+', log))

任何幫助將不勝感激!

您可以在拆分中使用積極的展望來說按空格拆分,其中空格后跟某個單詞,然后是等號

import re
string = "uuid=00b544de-2c89-4e40-a39f-1ef60f0273ca version=3df1e743-439e-49a5-bf12-ba49e54c2a9d creationTime=2020-02-26 04:09:02.152073 lastUpdateTime=2020-02-26 04:09:02.152073 name=My Object Name comment=create my object type=Custom customType=SCT returnValueOnAccess=true timeFormatString=YYYY min=49 max=20000 specialCharacter=X specialType=BigAndSmall numberOfBigDigits=0 numberOfSmallDigits=4"
my_list = re.split(r'\s(?=\w+=)', string)
print(*my_list, sep="\n")

輸出

uuid=00b544de-2c89-4e40-a39f-1ef60f0273ca
version=3df1e743-439e-49a5-bf12-ba49e54c2a9d
creationTime=2020-02-26 04:09:02.152073
lastUpdateTime=2020-02-26 04:09:02.152073
name=My Object Name
comment=create my object
type=Custom
customType=SCT
returnValueOnAccess=true
timeFormatString=YYYY
min=49
max=20000
specialCharacter=X
specialType=BigAndSmall
numberOfBigDigits=0
numberOfSmallDigits=4

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM