데이터베이스에서 논리 표현식 문자열을 얻었으므로이를 추가 평가를 위해 목록에 넣어야합니다. 나는 이미 문자열 파싱에 대해 많이 읽으려고했지만 지금까지 답을 찾을 수 없었다.파이썬 : 논리 문자열을리스트 목록으로 구문 분석
input_string1 = '((A OR B) AND (C OR D)) OR E'
input_string2 = '(A AND (B OR C) AND D AND E)'
input_string3 = ' A OR (B AND C) OR D OR E'
예상 OUPUT :
Results_string1=[ ['A', 'C'], ['A','D'], ['B','C'], ['B','D'], ['E']]
Results_string2=[ ['A', 'B', 'D', 'E'], ['A', 'C', 'D', 'E'] ]
Results_string3=[ ['A'], ['B','C'], ['D'], ['E'] ]
그래서 기본적으로 내가 OR
의 측면에서 완전히 팩터 표현을 필요로하고 목록에 사람을 넣어 문제를 쉽게 이해하기 위해서, 여기에 3 가지 예입니다. 즉, AND
조건은 동일한 sublist
에 두 표현식을 모두 포함하여 표현되며, OR
조건은 새 하위 목록을 생성합니다.
e.g. E AND F --> [E, F], E OR F --> [[E],[F]]
데이터베이스의 문자열에는 임의의 길이와 임의의 대괄호가 있습니다.
누구나 문법을 정의하는 방법을 알았습니다. pyparsing 꾸러미?
import pyparsing as pp
gene_id = pp.Word(pp.alphanums)
logical = (pp.Keyword("AND") | pp.Keyword("OR")).setName("logical")
l_brackets = (pp.Literal('(')).setName('l_brackets')
r_brackets = (pp.Literal(')')).setName('r_brackets')
하지만 어떻게 내가 진짜 파서를 정의해야합니까 :
지금까지 문법의 시작은?
주요 문제 중 하나는 임의의 발생하는 대괄호와 문자열의 길이가 다른 방법을 처리하는 방법을 모르겠다는 것입니다. 나는 도구 상자에서 nestedExpr()-parser
으로 놀고 있었지만 지금까지는 올바른 동작을 만들지 못했습니다.
는 지금까지 시도 무엇을 우리에게 보여주십시오이다. –
@tobias_k 또는 Discrete Mathematics에서 사용 된 기호를 기꺼이 사용하려면'+'또는'*'를 사용할 수 있습니다. –
그래서, 그는 단지 표현을 단순화하기로되어 있습니다.나는 어휘 분석기 (?)의 동작으로 표현을 반복하는 것을 생각하고있다. –