2010-04-23 5 views
8

나는 다음과 같은 한 일치하는 문자열 :파이썬 : 목록과

temp = "[email protected]+" 

lists = ["abc", "123.35", "xyz", "AND+"] 

for list in lists 
    if re.match(list, temp, re.I): 
    print "The %s is within %s." % (list,temp) 

re.match 만 나도 사이에서 하위 문자열과 일치하는 방법 문자열의 시작을 일치합니다.

답변

14

re.match 대신 re.search을 사용할 수 있습니다.

여기에도 정규 표현식이 실제로 필요하지 않은 것처럼 보입니다. 정규 표현식 123.35은 아마도 점과 일치하기 때문에 예상 한 것을 수행하지 못합니다.

이 경우라면 x in s을 사용하여 간단한 문자열 봉쇄를 수행 할 수 있습니다.

+0

예, 실제로 5 초 빨라졌습니다. +1 – YOU

12

사용 re.search하거나 if l in temp:

에서 사용 내장 타입 list 그림자가되어서는 안된다, 그래서 for l in lists:이 더

+0

''in '과 일치하는 간단한 부분 문자열이 re.search보다 훨씬 쉽습니다. – fantabolous

0
당신은 map를 사용하여 약간 더 복잡한 검사하여이 작업을 수행 할 수

any.

>>> temp = "[email protected]+" 
>>> lists = ["abc", "123.35", "xyz", "AND+"] 
>>> any(map(lambda match: match in temp, lists)) 
True 
>>> temp = 'fhgwghads' 
>>> any(map(lambda match: match in temp, lists)) 
False 

컴파일 된 정규 표현식보다 빠르면 확실하지 않습니다.

관련 문제