<p>您可以使用<em>简化操作结构分区</em>,不需要任何正则表达式,只需拆分字符串:</p>
<pre><code>s = "Status=ONLINE, Updateability=READ_WRITE, UserAccess=MULTI_USER, Recovery=SIMPLE, Version=706, Collation=SQL_Latin1_General_CP1_CI_AS, SQLSortOrder=52, IsAutoCreateStatistics, IsAutoUpdateStatistics, IsFullTextEnabled"
def repl(s):
for sub in s.split(", "):
k, _, v = sub.partition("=")
yield (k, v) if v else (k, "True")
</code></pre>
<p>在<code>=</code>上分区时,如果在<code>=</code>上有一个空字符串,则表示我们没有配对,因此我们不需要也不需要关心潜在密钥的任何先验知识:</p>
^{pr2}$
<p>另外,如果空格可能不存在,您可以在<code>","</code>上拆分并去掉空白,或者使用<em>csv</em>lib settin<code>skipinitialspace=True</code>,它将处理<code>"foo, bar"</code>和<code>"foo,bar"</code>:</p>
<pre><code>from csv import reader
from itertools import chain
def repl(s):
for sub in chain(*reader([s], skipinitialspace=True)):
k, _, v = sub.partition("=")
yield (k, v) if v else (k, "True")
print(dict(repl(s)))
</code></pre>
<p>如果您只想创建一个新的df,并且所有的键都相同:</p>
<pre><code>from csv import reader
from itertools import chain
import pandas as pd
def repl(s):
d = {}
for sub in chain(*reader([s], skipinitialspace=True)):
k, _, v = sub.partition("=")
d[k] = v if v else "True"
return d
df = pd.DataFrame.from_records(map(repl ,status))
print(df)
</code></pre>
<p>但是根据讨论,如果您稍后看到第一个dict中没有的键,那么您将得到not <code>True</code>的行值的nan</p>