키의 빈 값을 캡처하는 정규식

키의 빈 값을 캡처하는 정규식

아래 입력 문자열에서 "Comment" 값을 캡처하려고 하는데 regex = ^comment[\s*:]*(.*) 다음과 같은 출력이 표시됩니다. "comment": "프로브 사이클 오류: 0"

No of Host Probes       : 0
Max no of Host Probes   : 0
rstIsFailure            : 1
state                   : UNKNOW
comment                 :  
probe cycle errors      : 0
Perf Callback Ids       : None
Group Member            : __jjjjkj - U0

예상 출력:comment :

답변1

를 사용 sed하고 다음 뒤에 첫 번째 공백 문자가 필요하지 않다고 가정합니다 :.

sed '/^comment/!d; s/[^:]*:[[:blank:]]//' file

또는 하나의 편집 문만 사용하여

sed -n 's/^comment[[:blank:]]*:[[:blank:]]\(.*\)/\1/p' file

Python에서는 다음과 같이 보이고 싶습니다.

^comment[[:blank:]]*:[[:blank:]](.*)

아니면 어쩌면

^comment\s*:\s(.*)

Python이 POSIX 문자 클래스를 이해하지 못하는 경우.

[[:blank:]]*비트는 공백이나 탭의 순서와 일치합니다. 이 패턴은 개행 문자를 포함하여 더 넓은 범위의 공백 문자와 일치한다는 점에서 \sPOSIX 문자 클래스와 더 유사합니다 .[[:space:]]


표현식의 문제는 문자열 내에서 전체 문서를 일치시키는 반면 Python(당신이 사용하고 있다고 가정)에서는 \s문자열(전체 문서의 문자열)에 포함된 개행을 일치시킨다는 것입니다. 따라서 이 표현식은 첫 번째 비공백(개행 포함), non *, non :(둘 다 의 리터럴임 :) , 문자(즉, 다음 줄의 in )부터 다음 개행까지 모든 것을 캡처합니다.*[...]pprobe

답변2

다음과 같이 설정할 수도 있습니다.

'^comment[\s*:]*(\S+| +)$'

공백이나 공백(아래에 자세히 설명됨) 뒤에 줄 끝이 오거나 공백 뒤에 줄 끝이 오는 항목과 일치하도록 으로 .*변경 하세요 .\S+

| +)또한 세트의 공백 수(하나 이상)와 일치할 수도 있습니다 .

그런 다음 컬렉션은 현재 겪고 있는 이 시나리오를 캡처하기 위해 줄 끝에 따라올 것으로 예상됩니다.

다음은 일치 기준을 보여주는 정규 표현식의 스크린샷입니다.

여기에 이미지 설명을 입력하세요.

관련 정보