본문 바로가기

tcl 스크립트를 보다 보면 맨 마지막 "\" 를 입력하여 한줄짜리 명령을 다중 라인으로 처리하는 경우가 있다. 그리고 문법상으로 {, [, ( 이런 오픈 브레이스 이후의 멀티라인도 한 줄로 처리할 수 있도록 하는 것이 필요하다.

이런 찾아내서 한줄로 만드는 코드 샘플을 보자.

이 코드는 괄호 { } 사이에 있는 단어를 추출하는 기능을 포함하며, 줄 끝에 있는 \는 단순한 줄바꿈으로 처리하여 해당 줄을 다음 줄과 결합하지만, 공백 없이 연결합니다.

import re

def join_lines(lines):
    combined_lines = []
    open_brackets = {'{': '}'}
    stack = []

    current_line = ""
    for line in lines:
        original_line = line.rstrip()  # 줄 끝의 공백 제거
        if original_line.endswith('\\'):
            current_line += original_line[:-1]  # \ 제거
            continue

        current_line += original_line
        for char in current_line:
            if char in open_brackets:
                stack.append(open_brackets[char])
            elif stack and char == stack[-1]:
                stack.pop()

        # If the stack is empty, meaning all brackets are closed or no brackets were found:
        if not stack:
            combined_lines.append(current_line)
            current_line = ""
        else:
            current_line += " "  # Add a space if the line ends but stack is not empty (i.e., bracket not closed)

    if current_line:  # Add any remaining content
        combined_lines.append(current_line)

    return combined_lines

def extract_words_within_braces(lines):
    words = []
    for line in lines:
        # Extract words within braces
        matches = re.findall(r'\{([^}]*)\}', line)
        words.extend([word.strip() for word in matches])
    return words

def main():
    print("여러 줄의 문자열을 입력하세요. 각 줄은 엔터로 구분됩니다.")
    print("입력을 마치려면 두 번 엔터하세요.")

    input_lines = []
    while True:
        try:
            line = input()
            if line == "":
                break
            input_lines.append(line)
        except EOFError:
            break

    combined_lines = join_lines(input_lines)
    words = extract_words_within_braces(combined_lines)

    print("\n조합된 결과:")
    for line in combined_lines:
        print(line)

    print("\n괄호 안의 단어들:")
    for word in words:
        print(word)

if __name__ == "__main__":
    main()

설명:

  • join_lines 함수는 입력된 문자열을 받아서 연결할 필요가 있는 경우 연결하고, 줄의 끝이 \로 끝날 경우 다음 줄과 결합합니다. {} 내부의 내용을 유지하면서 처리합니다.
  • extract_words_within_braces 함수는 결합된 문자열에서 {} 내의 단어를 추출합니다.
  • main 함수에서는 사용자로부터 여러 줄의 입력을 받아 처리한 후, 결과와 괄호 안의 단어들을 출력합니다.

이 스크립트는 입력된 문자열 중에서 괄호 {} 사이에 있는 내용을 추출하는 데 유용하게 사용할 수 있습니다.

B로그0간

개발 관련 글과 유용한 정보를 공유하는 공간입니다.