대괄호 사이에서 텍스트를 추출하는 정규식
간단한 정규식 질문. 다음 형식의 문자열이 있습니다.
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]*\])
대괄호 사이에 모든 것을 원한다면
당신이 텍스트, 숫자 및 기호를 원한다면
(\[.*\])
'Programming' 카테고리의 다른 글
EC2 인스턴스에서 인스턴스 ID를 얻는 방법은 무엇입니까? (0) | 2020.02.29 |
---|---|
안드로이드 : 키보드 입력 버튼이 "검색"이라고 말하고 클릭을 처리하는 방법은 무엇입니까? (0) | 2020.02.29 |
JavaScript에서 시간을 비교하지 않고 날짜 부분 만 비교 (0) | 2020.02.29 |
JavaScript에서 URL의 호스트 이름 부분을 추출하는 방법 (0) | 2020.02.29 |
UIButton에 여러 줄 텍스트를 어떻게 추가합니까? (0) | 2020.02.29 |