2011-09-13 4 views
75

전체에 걸쳐 참조 번호가 흩어져있는 문서를 구문 분석하려고합니다.RegEx - 가변 길이 번호 일치

텍스트 텍스트 텍스트 {4 : 2} 더 놀라운 텍스트 {4 : 3} 훨씬 나중에 {222 : 115}에 아직 좀 더 텍스트입니다.

참조는 항상 대괄호로 묶여 있으며 둘 사이에 항상 콜론이 있습니다. 나는 그 (것)들을 찾아내는 표정을 썼다.

{[0-9]:[0-9]} 

그러나, 이것은 분명히 당신은 두 개 또는 세 자리 숫자 건너 순간을 실패하고 그이어야 알아내는 데 문제가 있어요. 처리 할 수있는 최대 크기는 세 자리 (999 : 999) 이상입니다.

아무도 이것을 처리하기위한 적절한 표현에 대한 아이디어가 있습니까?

+8

OP가 신경 쓰지 않아도, 나는 궁금하다. 왜이 질문에 대한 하향 투표를해야 하는가? 나는 그것에 문제가있는 것을 보지 못한다. – John

+3

@ 존 : 어떤 이유로 사람들은 쉬운 응답이있는 곳에, 특히'regex' 태그에 질문을 downvote하고 싶습니다. – CanSpice

+35

@ xanatos - 그래서 SO 질문은 이미 물어 보는 특정 주제에 대해 유능한 사람들에게만 해당됩니다. 참 좋은 계획 이군. –

답변

82
{[0-9]+:[0-9]+} 

시도 추가 플러스 (들)

21

이 시도 :

{[0-9]{1,3}:[0-9]{1,3}} 

{1,3} 수단 "경기 선행 문자의 1 ~ 3".

8

{min,max}을 사용하여 이전 항목의 일치 횟수를 지정할 수 있습니다.

{[0-9]{1,3}:[0-9]{1,3}} 

또한, 대부분의 정규식 맛을 위해 [0-9] 대신 숫자에 대한 \d를 사용할 수 있습니다

{\d{1,3}:\d{1,3}} 

당신은 또한 그냥 명확 있는지 확인하기 위해, 외부 {}을 탈출 고려할 수 있습니다 그들은 반복 정의의 일부가 아닙니다.

+2

아니요 유럽어가 아닌 다른 문자를 사용하지 않는 한 대부분의 정규 표현식을 사용하지 마십시오. http://www.fileformat.info/info/unicode/category/Nd/list.htm – xanatos

48

어떤 정규식 엔진을 사용하고 있습니까?

\{\d+:\d+\} 

\d 실제로 [0-9] 속기이지만, 중요한 부분은 "하나 이상의"를 의미 +의 추가이다 : 그들 대부분은 다음 식을 지원합니다.