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

时间:2016-08-30 02:32:42

标签: python string python-3.x python-2.x

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

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

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

示例:

somedictionary.get('someVariable1')

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

2 个答案:

答案 0 :(得分:1)

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

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'"

答案 1 :(得分:0)

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

每当看到逗号时,请参阅单引号计数。如果它是奇数(意味着你当前在引用的字符串中),不要在字符串副本上添加逗号;而是添加一些独特的占位符值(即PEANUTBUTTER之类的东西,它实际上永远不会出现在字符串中。)

当你完成字符串副本的构建时,引号内不会有任何逗号,因为你用PEANUTBUTTER替换了所有这些逗号,所以你可以安全地用逗号分割。

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