繁体   English   中英

在逗号上分割字符串,但忽略单引号中的逗号,并在python中分割字符串后创建字典

[英]split string on commas but ignore commas with in single quotes and create a dictionary after string split in python

我有一个字符串,如下所示,

someVariable1='9',someVariable2='some , value, comma,present',somevariable5='N/A',someVariable6='some text,comma,= present,'

我必须在逗号上拆分以上字符串,但忽略python中引号内的逗号,并且我必须创建一个字典来获取变量的值。

例:

somedictionary.get('someVariable1')

我是python的新手,请帮助我如何在python中实现此目标

尝试使用以下正则表达式,(?=(?:[^']*\\'[^']*\\')*[^']*$)进行拆分:

import re
re.split(",(?=(?:[^']*\'[^']*\')*[^']*$)",s)

# ["someVariable1='9'",
#  "someVariable2='some , value, comma,present'",
#  "somevariable5='N/A'",
#  "someVariable6='some text,comma,= present,'"]
  • 它使用前瞻语法(?=...)找出要分割的特定逗号;
  • 查找模式为(?:[^']*\\'[^']*\\')*[^']*$
  • $匹配字符串的末尾,并可选地匹配非'字符[^']*
  • 使用非捕获组(?:..)定义双引号模式[^']*\\'[^']*\\' ,该模式可能会出现在逗号后面,可以用作分隔符。

假设引号始终成对出现。

要将以上内容转换为字典,可以将每个子表达式除以=

lst = re.split(",(?=(?:[^']*\'[^']*\')*[^']*$)",s)
dict_ = {k: v for exp in lst for k, v in [re.split("=(?=\')", exp)]}

dict_

# {'someVariable1': "'9'",
#  'someVariable2': "'some , value, comma,present'",
#  'someVariable6': "'some text,comma,= present,'",
#  'somevariable5': "'N/A'"}

dict_.get('someVariable2')
# "'some , value, comma,present'"

构建字符串的副本,遍历原始字符串的每个字符,并跟踪遇到的单引号。

每当您看到逗号时,请参考单引号。 如果是奇数(表示您当前位于带引号的字符串中),请不要在字符串副本上添加逗号; 而是添加一些唯一的占位符值(例如,PEANUTBUTTER之类的东西永远不会真正出现在字符串中。)

构建完字符串副本后,在引号中将不会包含任何逗号,因为您已用PEANUTBUTTER替换了所有逗号,因此可以安全地分割逗号。

然后,在拆分后的列表中,返回并用逗号替换PEANUTBUTTER。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM