2017-02-22 6 views
0

私はリストに多くのテキストを入れており、これらのテキストを詳細に検索して特定のエントリを探したいと思っています。 たとえば、テキストフィールドに '(aaaまたはbbb)と(cccまたはdddまたはeee)'のようないくつかのリクエストを入力して、これらの基準を含む対応するリストエントリを探したいとします。Pythonの論理式から文字列を検索する

だから私の検索方法は、そのようなことをするでしょう:

# '(aaa or bbb) and (ccc or ddd or eee)' 
    results = [] 
    for text in textlist: 
     if (text.find('aaa') != -1 or text.find('bbb') != -1) and (text.find('ccc') != -1 or text.find('eee') != -1 or text.find('fff') != -1): 
     results.append(text) 

私は私の検索を解析し、多くのfindメソッドで、if文にそれを変換する方法を知りません。

まず、検索をコードする良い方法はありますか?より最適化された?ライブラリを持っていますか? 第2に、検索の解析方法は? ifを構築する方法は?

私は私の要求とIを解析するpyparsing nestedExpr方法は、そのリストを取得した使用: [[ 'AAA'、 'または'、 'BBB']、 'と'、[ 'CCC'、 'または' を、 'ddd'、 'or'、 'eee']]

質問はどのように解析して効果的な検索を行うのですか?たとえば、正規表現?

編集:

OK私は、この式を有する: "Aまたは(BまたはC)及び(DまたはE、またはFまたはG)またはHではない式(I又はJ)"

そして、私はこの構造を得ます: ['a'、 'or'、['b'、 'or'、 'c']、 'and'、['d'、 'or'、 'e' 'または'、 'f'、 'or'、 'g']、 'or'、 'h'、 'not'、['i'、 'or'、 'j']]

これを解析して正規表現を構築しますか?正規表現以外のすべてのこれらの用語を検索する簡単な方法はありますか?それは正規表現を構築することは困難であると思われるので...ここで

+0

[正規表現](https://en.wikipedia.org/wiki/Regular_expression)は、Pythonの['re'モジュール](https://docs.python.org)で見ることができます。 /3/library/re.html)。 – kazemakase

+0

正規表現ではベルが鳴りますか? –

+0

'(aaaまたはbbb)や(cccまたはdddまたはeee)'のような文字列を正規表現に変換する方法がわかりません... ' – emurb

答えて

0
def main(input_list): 
    stack = [] 

    for item in input_list: 
     if item == ')': 
      temp_list = [] 
      while True: 
       stack_item = stack.pop() 
       if stack_item == '(': 
        stack.append(temp_list) 
        break 
       else: 
        temp_list.insert(0, stack_item) 
     else: 
      stack.append(item) 

    return stack[0] 

は、いくつかの例です:

In [6]: input_list = '((aaa or bbb) and (ccc or ddd or eee))' 

In [7]: main(input_list.split()) 
Out[7]: [['aaa', 'or', 'bbb'], 'and', ['ccc', 'or', 'ddd', 'or', 'eee']] 

In [8]: input_list = '(aaa or bbb)' 

In [9]: main(input_list.split()) 
Out[9]: ['aaa', 'or', 'bbb'] 

In [10]: input_list = '()' 

In [11]: main(input_list.split()) 
Out[11]: [] 

私は独立した意味のニーズに合わせて、すべてのブラケットがペアで表示され、いくつかの仮定と各文字を作りましたスペース区画。

関連する問題