python 정규 표현식 질문
조회수 257회
pa = re.compile("(?P<A>\w+)(?:\[(?P<B>\d+):(?P<C>\d+)\]|\[(?P<D>\d+)\])?")
위의 정규 표현식의 의미가 궁금합니다.
(?P<A>\w+)
와 (?P<D>\d+)
두 개는 이해했습니다.
제가 막혔던 것이 가운데 부분이 이해가 되지 않습니다.
가운데 부분 (?:\[(?P<B>\d+):(?P<C>\d+)\]|\[(?P<D>\d+)\])?
여기서 ?:\이 의미하는 것은 무엇인지요??그리고 마지막에 ?는 또 무슨 의미 인가요?
[ ]이걸로 감싸기 전에 \이것을 넣어야 하는건지....
1 답변
-
제가 보기엔 파이썬 리스트 인덱서와 관련된 것 같습니다. 여기서 테스트 해 본 결과
my_list[3] # Match 1: my_list[3] # Group A: my_list # Group D: 3
my_list[2:5] # Match 1: my_list[2:5] # Group A: my_list # Group B: 2 # Group C: 5
과 같이 색인되었습니다.
(?P<A>\w+)
의 의미는 모든 문자를 Group A로 묶고,(?:\[(?P<B>\d+):(?P<C>\d+)\]|\[(?P<D>\d+)\])
의 or을 쪼개면\[(?P<B>\d+):(?P<C>\d+)\]
와\[(?P<D>\d+)\]
로 나누어 지는데,
이는 대괄호 안의 콜론 여부에 따라 그룹을 B, C 또는 D로 나누려는 것 같습니다.
마지막?
는 정말로 모르겠네요.추측으로는 오류 검출용이 아닐까 싶습니다.
my_list[3]error # Match 1: my_list[3] # Group A: my_list # Group D: 3 # Match 2: error # Group A: error
보시다시피 Match 2에 잡히는데 마지막에 있는
?
를 없애면 잡히지 않습니다.
댓글 입력