我不确定你真正在寻找什么,但是
import re
data = "date=2010-05-09,time=16:41:27,device_id=FE-2KA3F09000049,log_id=0400147717,log_part=00,type=statistics,subtype=n/a,pri=information,session_id=o49CedRc021772,from=\"prvs=4745cd07e1=example@example.org\",mailer=\"mta\",client_name=\"example.org,[194.177.17.24]\",resolved=OK,to=\"example@example.org\",direction=\"in\",message_length=6832079,virus=\"\",disposition=\"Accept\",classifier=\"Not,Spam\",subject=\"=?windows-1255?B?Rlc6IEZ3OiDg5fDp5fog+fno5fog7Pf46eHp7S3u4+Tp7SE=?=\""
pattern = r"""(\w+)=((?:"(?:\\.|[^\\"])*"|'(?:\\.|[^\\'])*'|[^\\,"'])+)"""
print(re.findall(pattern, data))
给你
[('date', '2010-05-09'), ('time', '16:41:27'), ('device_id', 'FE-2KA3F09000049'),
('log_id', '0400147717'), ('log_part', '00'), ('type', 'statistics'),
('subtype', 'n/a'), ('pri', 'information'), ('session_id', 'o49CedRc021772'),
('from', '"prvs=4745cd07e1=example@example.org"'), ('mailer', '"mta"'),
('client_name', '"example.org,[194.177.17.24]"'), ('resolved', 'OK'),
('to', '"example@example.org"'), ('direction', '"in"'),
('message_length', '6832079'), ('virus', '""'), ('disposition', '"Accept"'),
('classifier', '"Not,Spam"'),
('subject', '"=?windows-1255?B?Rlc6IEZ3OiDg5fDp5fog+fno5fog7Pf46eHp7S3u4+Tp7SE=?="')
]
之后您可能想清理引用的字符串(使用mystring.strip("'\"")
)。
编辑a="She said \"Hi!\""
:这个正则表达式现在也可以正确处理带引号的字符串 ( ) 中的转义引号。
正则表达式的解释:
(\w+)=((?:"(?:\\.|[^\\"])*"|'(?:\\.|[^\\'])*'|[^\\,"'])+)
(\w+)
:匹配标识符并将其捕获到反向引用号中。1
=
: 匹配一个=
(
:将以下内容捕获到反向引用编号中。2:
(?:
: 以下之一:
"(?:\\.|[^\\"])*"
: 双引号,后跟以下零个或多个:转义字符或非引号/非反斜杠字符,后跟另一个双引号
|
: 或者
'(?:\\.|[^\\'])*'
: 见上文,仅用于单引号。
|
: 或者
[^\\,"']
: 一个既不是反斜杠、逗号也不是引号的字符。
)+
: 至少重复一次,尽可能多地重复。
)
: 捕获组号结束。2.