2015-01-05 3 views
0

문자열 내에서 패턴을 찾기 위해 lookahead의 몇 가지 가능성을 시도했지만 여러 조건을 확인해야하므로 여기에 붙어 있습니다.여러 일치를 찾으려면 Regex

내가 가진

string = ''' i was behind the bars for (5.75) years ''' 
string2 = ''' I travelled for 6 months in Switzerland and some years say 5.2 in England ''' 
re.search(r'(?=\byears\b)([/d]+\S+)',str,re.I) 

같은 문자열 내가 년 후 GET 날짜에 대한 노력이; /S+은 숫자 조합 뒤에 공백이 있으므로 5.33, 5.44 등을 얻기 위해 사용됩니다.

대괄호 또는 따옴표로 묶여 있더라도 5.75, 10.25 등의 숫자 조합과 일치하는 정규 표현식을 원합니다. 하지만 숫자 만 필요합니다. 그것은 단어 "년"이전이나 후에있을 수 있습니다. Python에서 정규 표현식을 사용하여 여러 가능성을 확인하는 가장 좋은 방법은 무엇입니까?

+4

무엇 당신이 시도하고 어떻게이 부족했다 가능성? –

+0

잠시 기다려주세요. 댓글로 게시 해 드리겠습니다. – user3116355

+1

게시 ** ** 귀하의 질문 **뿐만 아니라 예상 입력 및 출력 –

답변

1

이것은 작동 할 수 있습니다.

업데이트

당신은 '잘못된 표현'오류가 발생하고 있습니다.
파이썬이 클러스터 그룹에서 수정자를 지원하지 않으면 무언가가 잘못 표시되지 않습니다.
case 수정자를 꺼내서 정규 표현식 함수의 옵션 부분에 추가하려고 할 수 있습니다.

다음이 시도 :

(?:\b(\d+(?:\.\d*)?|\.\d+)\b.*?(?:(?:\r?\n).*?){0,2}\byears?\b|\byears?\b.*?(?:(?:\r?\n).*?){0,2}\b(\d+(?:\.\d*)?|\.\d+)\b) 

원본 :

# (?i:\b(\d+(?:\.\d*)?|\.\d+)\b.*?(?:(?:\r?\n).*?){0,2}\byears?\b|\byears?\b.*?(?:(?:\r?\n).*?){0,2}\b(\d+(?:\.\d*)?|\.\d+)\b) 

(?i: 
     \b 
     (       # (1 start), Digits 
      \d+ 
      (?: \. \d*)? 
     | \. \d+ 
    )        # (1 end) 
     \b 
     .*? 
     (?:       # 0, 1 or 2 lines 
      (?: \r? \n) 
      .*? 
    ){0,2} 
     \b years? \b     # Followed by "year(s)" 

    |        # or -- 

     \b years? \b     # "year(s)" 
     .*? 
     (?:       # 0, 1 or 2 lines 
      (?: \r? \n) 
      .*? 
    ){0,2} 
     \b 
     (       # (2 start), Followed by Digits 
      \d+ 
      (?: \. \d*)? 
     | \. \d+ 
    )        # (2 end) 
     \b 
) 
+0

@sin - 감사합니다. 그것은 작동하지 않습니다. 그러나 나는 약간의 수정을하고 있는데, 그것이 잘 작동한다면 나는 여기에 답을 게시 할 것이다. – user3116355

+0

@sin - 내가 겪은 오류로 답을 편집했습니다. – user3116355

+0

'잘못된 표현입니다 '하지만 어디서 말하지 않습니다. 대소 문자를 구분하지 않는 수정자를 가져 오도록 업데이트했습니다. 작동하는지 확인하십시오. – sln

관련 문제