[英]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.