Programming

대괄호 사이에서 텍스트를 추출하는 정규식

procodes 2020. 2. 29. 15:36
반응형

대괄호 사이에서 텍스트를 추출하는 정규식


간단한 정규식 질문. 다음 형식의 문자열이 있습니다.

this is a [sample] string with [some] special words. [another one]

대괄호 안의 단어를 추출하는 정규식은 무엇입니까?

sample
some
another one

참고 : 사용 사례에서는 대괄호를 중첩 할 수 없습니다.


다음 정규식을 전역 적으로 사용할 수 있습니다 .

\[(.*?)\]

설명:

  • \[: [은 메타 문자이므로 문자 그대로 일치 시키려면 이스케이프해야합니다.
  • (.*?) : 탐욕스럽지 않은 방식으로 모든 것을 일치시키고 포착하십시오.
  • \]: ]은 메타 문자이므로 문자 그대로 일치 시키려면 이스케이프해야합니다.

(?<=\[).+?(?=\])

대괄호없이 내용을 캡처합니다

  • (?<=\[) -긍정적 인 견해 [

  • .*? -콘텐츠에 대한 욕심없는 일치

  • (?=\]) -긍정적 인 전망 ]

편집 : 중첩 된 괄호의 경우 아래 정규식이 작동해야합니다.

(\[(?:\[??[^\[]*?\]))

이것은 잘 작동합니다 :

\[([^]]+)\]

대괄호를 중첩 할 수 있습니까?

그렇지 않은 경우 : \[([^]]+)\]대괄호를 포함하여 하나의 항목과 일치합니다. 역 참조 \1는 일치시킬 항목을 포함합니다. 정규 표현식이 둘러보기를 지원하는 경우

(?<=\[)[^]]+(?=\])

이것은 괄호 안의 항목과 만 일치합니다.


(?<=\().*?(?=\))위에 주어진 설명에 따라 잘 작동합니다. 다음은 파이썬 예제입니다.

import re 
str =    "Pagination.go('formPagination_bottom',2,'Page',true,'1',null,'2013')"
re.search('(?<=\().*?(?=\))', str).group()
"'formPagination_bottom',2,'Page',true,'1',null,'2013'"

일치하는 대괄호를 포함하지 않으려면 정규 표현식을 사용하십시오. (?<=\[).*?(?=\])

그것을 분해하자

.줄 끝을 제외한 모든 문자와 일치합니다. ?=A는 긍정적 예측 . 긍정적 인 lookahead는 특정 문자열이 뒤에 오면 문자열을 찾습니다. ?<=A는 긍정적 인 lookbehind . 긍정적 인 lookbehind는 특정 문자열이 앞에 오면 문자열을 찾습니다. 인용 ,

미리 긍정적으로 보아라 (? =)

표현식 B가 따르는 표현식 A를 찾으십시오.

A(?=B)

긍정적으로 보아라 (? <=)

표현식 B가 앞에 오는 표현식 A를 찾으십시오.

(?<=B)A

대안

정규식 엔진이 lookaheads 및 lookbehinds를 지원하지 않는 경우 정규식 \[(.*?)\]사용하여 그룹에서 괄호의 내부를 캡처 한 다음 필요에 따라 그룹을 조작 할 수 있습니다.

이 정규식은 어떻게 작동합니까?

괄호는 그룹의 문자를 캡처합니다. .*?(당신이하지 않는 한, 줄 끝을 제외하고 괄호 사이의 모든 문자를 얻을 s욕심없는 방식으로 플래그를 활성화).


([[][a-z \s]+[]])

위의 설명은 다음과 같습니다.

  • 대괄호 안의 문자 []는 문자 클래스를 정의합니다. 즉, 패턴은 대괄호 안에 언급 된 문자 하나 이상과 일치해야합니다.

  • \ s는 공백을 지정합니다

  •  +는 앞에서 언급 한 문자 중 하나 이상을 의미합니다.


이 코드는 대괄호와 괄호 사이의 내용을 추출합니다.

(?:(?<=\().+?(?=\))|(?<=\[).+?(?=\]))

(?: non capturing group
(?<=\().+?(?=\)) positive lookbehind and lookahead to extract the text between parentheses
| or
(?<=\[).+?(?=\]) positive lookbehind and lookahead to extract the text between square brackets

R에서 다음을 시도하십시오.

x <- 'foo[bar]baz'
str_replace(x, ".*?\\[(.*?)\\].*", "\\1")
[1] "bar"

대괄호 az 사이에 작은 알파벳 문자를 채우려면

(\[[a-z]*\])

작고 대문자를 원한다면 a-zA-Z

(\[[a-zA-Z]*\]) 

작은 대문자와 숫자 a-zA-Z0-9를 원한다면

(\[[a-zA-Z0-9]*\]) 

대괄호 사이에 모든 것을 원한다면

당신이 텍스트, 숫자 및 기호를 원한다면

(\[.*\])

참고 URL : https://stackoverflow.com/questions/2403122/regular-expression-to-extract-text-between-square-brackets



반응형