2013-12-12 5 views
2

주어진 정규 표현식 R, 예 : ^[a-z]+$ 및 일치하지 않는 문자열 예. [email protected], 일치하는 S의 가장 긴 하위 집합 (이 경우 abcde)을 어떻게 생성 할 수 있습니까?최상의 정규 표현식 일치 생성

저는 일반적인 솔루션에 관심이 있습니다. 예를 들어 R=/^[0-9]+(?=[a-z])/S=x123a에 대한 알고리즘은 123a을 반환해야합니다.

다른 말로하면 문제는 다음과 같습니다. 일치하지 않는 문자열에서 제거하여 일치시켜야하는 항목입니다.

+0

당신이 다음 단지'사용하지 말아야 [AZ] + '그런 다음 결과를 함축하십시오. 또한, 어떤 언어를 사용하고 있습니까? – HamZa

+1

질문에 다소 제한이 없습니다. 특정 문자 집합과 일치하지 않는 모든 것을 제거하려는 경우's/[^ az] + // g '를 입력하십시오. –

+1

@skamamishossifrage : 질문 업데이트 – georg

답변

2

내가 무력 솔루션 (자신의 정규식 엔진을 작성하지 않고, 가능) 만 생각 :

import itertools 
import re 

def all_substrings(s): 
    for i in reversed(range(len(s))): 
     for sequence in itertools.combinations(range(len(s)), i+1): 
      yield "".join(s[n] for n in sequence) 

def find_longest(s, regex): 
    for substring in all_substrings(s): 
     if regex.search(substring): 
      return substring 

print(find_longest("[email protected]", re.compile(r"^[a-z]+$"))) 
print(find_longest("x123a", re.compile(r"^[0-9]+(?=[a-z])"))) 

출력 :

abcde 
123a 
+0

고마워, 그건 내 생각을 확인했다. – georg