Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/asp.net-mvc-3/4.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构建解析器_Python - Fatal编程技术网

用python构建解析器

用python构建解析器,python,Python,我正在尝试用python制作一个解析器,它可以实现两种类型的功能 s1 = foo() s2 = {'k1':v1,'k2':v2} s3 = [v1,v2,v3...] 我说有两种。。。第一种类型通常是对象,第二种类型类似于变量。 现在第一个很简单 def parse_string_to_command(string): if "foo" in string: #handle this. elif # handle s2 elif #cond

我正在尝试用python制作一个解析器,它可以实现两种类型的功能

s1 = foo()
s2 = {'k1':v1,'k2':v2}
s3 = [v1,v2,v3...]
我说有两种。。。第一种类型通常是对象,第二种类型类似于变量。 现在第一个很简单

def parse_string_to_command(string):
     if "foo" in string:
         #handle this.
     elif # handle s2 
     elif #condition to handle s3
编辑1: 我想我没有清楚地说明我想要达到的目标

我想做的就是:

从该函数传递的所有内容都是字符串。。有些是方法。。而另一些则是变量。 我只是试着相应地处理它们

基本上这就是用户将要做的事情

 > params = {"input":"foobar"}
 > foo = Foo(params)
现在,来处理Foo方法。。我这样做:

   if "Foo" in string:
      tokens = string.split("=")
      # I have tokens [foo,Foo(params)]

   But params is a string now..whereas it is needed to be a dictionary.
现在我知道我可以在这里处理了..在Foo方法内部。。但一般来说,我希望在parse_string_to_命令函数中处理这些变量赋值


这有什么意义吗。

您可能希望研究使用Python解析器来实现您的目标

>>> import json
>>> a = json.loads('["foo", {"bar": ["baz", null, 1.0, 2]}]')
>>> a
[u'foo', {u'bar': [u'baz', None, 1.0, 2]}]
>>> a[0]
u'foo'
>>> a[1]
{u'bar': [u'baz', None, 1.0, 2]}
>>> a[1]['bar']
[u'baz', None, 1.0, 2]
>>>>>> a[1]['bar'][0]
u'baz'
或者如果你需要它完全定制。。。我不打算为您编写一个完整的解析器,我想使用一些正则表达式将有助于简化您的工作

>>> import re
>>> s1 = "foo()"
>>> s2 = "{'k1':v1,'k2':v2}"
>>> s3 = "[v1,v2,v3]"
>>> re.match('(.*?)\(\)',s1).group(1)
'foo'
>>> re.findall('\{*(.*?):(.*?)[,\}$]+',s2)
[("'k1'", 'v1'), ("'k2'", 'v2')]
>>> re.findall('\[*(.*?)[,\]$]+',s3)
['v1', 'v2', 'v3']
要仅识别3种类型的输入字符串,请执行以下操作:

def parse_string_to_command(s):
    if re.match('(.*?\(\))',s):
        print "This is a function"
    elif re.match('^\{.*\}$',s):
        print "This is kind of like variables 1"
    elif re.match('^\[.*\]$',s):
        print "This is kind of like variables 2"

聪明并不总是意味着最好。@WaleedKhan:那么,什么是强有力地处理这个问题的最佳方法呢?@WaleedKhan只是想澄清一下:在编程中,聪明或多或少并不意味着最好:它或多或少与readability@Fraz您尚未指定所需的功能类型。因此,这个问题并不是真正可以回答的。@WaleedKhan:具体是什么。。你有一根绳子进来了。。即使它是一本字典。。列表或方法。。这是一根绳子。。我想相应地处理它??def parse_string_to_commandstring:??正当