>  기사  >  백엔드 개발  >  문자열에서 중첩된 괄호를 일치시키는 방법: Regex와 Pyparsing

문자열에서 중첩된 괄호를 일치시키는 방법: Regex와 Pyparsing

Mary-Kate Olsen
Mary-Kate Olsen원래의
2024-11-01 12:35:30696검색

How to Match Nested Parentheses in Strings: Regex vs. Pyparsing

중첩 괄호와 정규식 일치

중첩 괄호가 포함된 문자열을 처리할 때 정규식을 사용하여 일치시키는 것이 어려울 수 있습니다. re.findall()을 사용하는 제공된 코드는 가장 바깥쪽 표현식 일치에 성공하지만 중첩된 표현식 캡처에는 실패합니다.

정규 표현식이 부족한 이유

정규식은 평면적 특성으로 인해 중첩된 구조를 처리할 때 본질적으로 제한됩니다. 중첩된 괄호와 같은 복잡한 구조를 구문 분석하는 데 중요한 재귀 또는 역추적 개념이 부족합니다.

더 나은 솔루션: Pyparsing

이를 위해 정규식을 사용하는 대신 더 나은 옵션은 중첩된 문법 구조를 구문 분석하기 위해 특별히 설계된 라이브러리인 Pyparsing을 활용하는 것입니다. Pyparsing은 중첩된 구문을 처리할 수 있는 문법을 정의할 수 있는nestedExpr() 함수를 제공합니다.

다음 코드 조각은 Pyparsing을 사용하여 중첩된 괄호를 일치시키고 구문 분석하는 방법을 보여줍니다.

<code class="python">import pyparsing

# Define the elements of the expression
thecontent = pyparsing.Word(pyparsing.alphanums) | '+' | '-'

# Define the nested expression grammar
parens = pyparsing.nestedExpr('(', ')', content=thecontent)</code>

이제 괄호를 사용하여 중첩된 괄호가 포함된 문자열을 구문 분석할 수 있습니다.

<code class="python">res = parens.parseString("((12 + 2) + 3)")</code>

출력:

[
  [['12', '+', '2'], '+', '3']
]

출력은 중첩된 목록입니다. 내부 목록은 구문 분석된 표현식의 일부를 나타냅니다.

결론

정규 표현식은 특정 문자열 조작 작업에 유용할 수 있지만 복잡하고 중첩된 작업에는 제한이 있습니다. 구조. 이러한 경우 Pyparsing은 이러한 시나리오에 맞는 보다 포괄적인 솔루션을 제공합니다.

위 내용은 문자열에서 중첩된 괄호를 일치시키는 방법: Regex와 Pyparsing의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!

성명:
본 글의 내용은 네티즌들의 자발적인 기여로 작성되었으며, 저작권은 원저작자에게 있습니다. 본 사이트는 이에 상응하는 법적 책임을 지지 않습니다. 표절이나 침해가 의심되는 콘텐츠를 발견한 경우 admin@php.cn으로 문의하세요.