为了回答您的主题,我建议您使用包含词法分析器和解析器的软件包,因为您的字符串似乎具有不同类型的格式。
这是一个非常“易于使用”的:sly
词法分析器/解析器的工作原理
词法分析器
基本上,这会将您的字符串拆分为几个匹配特定模式(通常是正则表达式)的单词(或表达式)。
这一步叫做tokenization。
解析器
解析器将使用您的字符串部分(tokens)来操作一些已定义的函数。
示例
我做了这个例子:
from sly import Lexer, Parser
class MyLexer(Lexer):
tokens = {KEY, PARAM, AND, EQUAL, LPAREN, RPAREN, IF_STATEMENT}
ignore = ' \t\n'
IF_STATEMENT = r'if'
AND = r'AND'
KEY = r'[a-zA-Z_][a-zA-Z0-9_.]*'
PARAM = r"'[a-zA-Z0-9_. ]*'"
EQUAL = r'='
LPAREN = r'\('
RPAREN = r'\)'
def PARAM(self, token):
token.value = token.value.replace("'", '')
return token
def error(self, t):
print("Illegal character '%s'" % t.value[0])
self.index += 1
class MyParser(Parser):
tokens = MyLexer.tokens
@_('term')
def statement(self, p):
return p.term
@_('IF_STATEMENT term')
def term(self, p):
return p.term
@_('term AND term')
def term(self, p):
return {**p.term0, **p.term1}
@_('LPAREN term RPAREN')
def term(self, p):
return p.term
@_('KEY EQUAL expr')
def term(self, p):
return {str(p.KEY): p.expr}
@_('PARAM')
def expr(self, p):
return p.PARAM
if __name__ == '__main__':
lexer = MyLexer()
parser = MyParser()
tokenizer = lexer.tokenize(input('Input string > '))
print(parser.parse(tokenizer))
这并不完美,但它有效;)
最好的问候。