Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/352.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
python:如何解析字符串值,如;a=';abc&x27;b=';cde';c=13“;_Python_String Parsing - Fatal编程技术网

python:如何解析字符串值,如;a=';abc&x27;b=';cde';c=13“;

python:如何解析字符串值,如;a=';abc&x27;b=';cde';c=13“;,python,string-parsing,Python,String Parsing,基本上,如果我有一个像“a='abc'b='cde'c=13”这样的字符串,我如何将其解析到字典中,如: {'a': 'abc', 'b': 'cde', 'c': 13} 请注意,值可以是字符串文字或数字,并且字符串文字本身可以包含等号。字符串文本之外的空格是不相关的,里面的空格必须保留。但是,字符串保证在key=value-key=value-key=value模式中交替出现。特殊字符可以并将显示在字符串文本中,但键将是纯字母字符。使用pyparsing: from pyparsing i

基本上,如果我有一个像
“a='abc'b='cde'c=13”
这样的字符串,我如何将其解析到字典中,如:

{'a': 'abc', 'b': 'cde', 'c': 13}
请注意,值可以是字符串文字或数字,并且字符串文字本身可以包含等号。字符串文本之外的空格是不相关的,里面的空格必须保留。但是,字符串保证在key=value-key=value-key=value模式中交替出现。特殊字符可以并将显示在字符串文本中,但键将是纯字母字符。

使用pyparsing:

from pyparsing import Word, Suppress, CharsNotIn, nums, alphanums, dictOf

int_value = Word(nums)
str_value = Suppress("'") + CharsNotIn("'") + Suppress("'")
value = int_value | str_value
identifier = Word(alphanums)
result = dictOf(identifier + Suppress("="), value)

pr = result.parseString("a = 'abc' b = 'cde' c=13")
print(pr.asDict())

# {'a': 'abc', 'b': 'cde', 'c': '13'}

这不考虑转义单引号,所以您必须添加它。pyparsing网站上的某个地方有关于它的文档。

因此它可能是
“a='abc'b='cde'c=13 d='asd=123'”
?这些值可以包含空格吗?(是否
'abc def'
为有效值)转义引号如何?(是否
'abc'def'
有效)我猜两个单引号之间的任何内容都必须被视为一个值。但是OP应该为有效的输入更好地定义规则,以得到合适的答案。示例输入和预期输出的列表也很好。是的,引号内的任何内容都必须保留。包括“=”、“\”、”等等@kelvinsong你应该从这个描述开始。没有理由不能解析单个标记。如果它不起作用,那么关于xml/html解析器的使用问题就不同了。在这种情况下,手工制作的解析器将与您需要的不匹配。在这种情况下,您还需要解析xml实体。如果字符串文字仅为单引号或双引号,而不是混合引号,则此方法有效。因此
“a=\'abc\'b='cde'”
失败1<代码>“在问题中没有提到。2.这是一个示例解决方案-您可以轻松地扩展它以支持双引号和引号转义-查看pyparsing文档,了解如何做到这一点此代码实际上不起作用,就像前面的三个答案一样。@TigerhawkT3您必须发布特定错误-此处显示的代码工作正常。正如上面的OP所说,对于混合报价类型,它会失败。由于问题指定了字符串文字和特殊字符,因此它应该能够处理这些问题。