Extract sentences in nested parentheses using Python

后端 未结 2 1892
难免孤独
难免孤独 2021-01-26 06:48

I have multiple .txt files in a directory. Here is a sample of one of my .txt files:

kkkkk;

  select xx(\"xE\'\", PU         


        
2条回答
  •  夕颜
    夕颜 (楼主)
    2021-01-26 07:47

    I would say my solution is not the optimised one, but it will solve your problem.

    Solution (Just replace test.txt with your file name)

    result = []
    with open('test.txt','r') as fd:
        # To keep track of '(' and ')' parentheses
        parentheses_stack = []
        # To keep track of complete word wrapped by ()
        complete_word = []
        # Iterate through each line in file
        for words in fd.readlines():
            # Iterate each character in a line
            for char in list(words):
                # Initialise the parentheses_stack when you find the first open '(' 
                if char == '(':
                    parentheses_stack.append(char)
                # Pop one open '(' from parentheses_stack when you find a ')'
                if char == ')':
                    if not parentheses_stack = []:
                        parentheses_stack.pop()
                    if parentheses_stack == []:
                        complete_word.append(char)
                # Collect characters in between the first '(' and last ')'
                if not parentheses_stack == []:
                    complete_word.append(char)
                else:
                    if not complete_word == []:
                        # Push the complete_word once you poped all '(' from parentheses_stack
                        result.append(''.join(complete_word))
                        complete_word = []
    
    
    
    for res in result:
        print(res)
    

    Result:

    WS:python rameshrv$ python3 /Users/rameshrv/Documents/python/test.py
    ("xE'", PUT(xx.xxxx.),"'")
    ("TRUuuuth")
    (
    SELECT abc AS abc1, abc_2_ AS efg, abc_fg, fkdkfj_vv, jjsflkl_ff, fjkdsf_jfkj
        FROM &xxx..xxx_xxx_xxE
    where ((xxx(xx_ix as format 'xxxx-xx') gff &jfjfsj_jfjfj.) and 
          (xxx(xx_ix as format 'xxxx-xx') lec &jgjsd_vnv.))
     )
    ("xE'", PUT(xx.xxxx.),"'")
    ()
    ("CUuuiiiiuth")
    (SELECT abc AS abc1, abc_2_ AS efg, abc_fg, fkdkfj_vv, jjsflkl_ff, fjkdsf_jfkj
        FROM &xxx..xxx_xxx_xxE
    where ((xxx(xx_ix as format 'xxxx-xx') gff &jfjfsj_jfjfj.) and 
          (xxx(xx_ix as format 'xxxx-xx') lec &jgjsd_vnv.))(( ))
     )
    

提交回复
热议问题