我有一个字符串,如下所示,
someVariable1='9',someVariable2='some , value, comma,present',somevariable5='N/A',someVariable6='some text,comma,= present,'
我必须在逗号上拆分字符串,但在python中忽略逗号中的逗号,我必须创建一个字典来获取变量的值。
示例:
somedictionary.get('someVariable1')
我是python的新手,请帮助我如何在python中实现这个目标
答案 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。