2012-12-20 1 views
-1

나는리스트를 가지고 있는데 그리스트에있는 하나의 아이템이 정규 표현식을 사용하는 문자열에 있는지 알고 싶다. 이것을 할 수있는 방법이 있습니까?파이썬 목록에있는 하나의 항목이 정규식을 사용하는 문자열에 있는지 어떻게 알 수 있습니까?

+0

질문하신 다른 질문에 대한 답변을 수락하지 않으 셨다는 점에 유의하십시오. 이렇게하면 사람들이 대답하지 않을 수 있습니다. –

+0

@Lattyware : 긴 날이었습니다. 아마도 나는 ...을 꺼야합니다. :-P –

+0

@MartijnPieters - 처음에는 똑같은 생각이었습니다. – mgilson

답변

5

확실히.

myregex = re.compile(...) 
print any(myregex.search(s) for s in my_list_of_strings) 

아니면 :

regexs = [re.compile(s) for s in my_list_of_regex_strings] 
any(r.search(my_string) for r in regexs) 

내 생각 같은 것은 같은 아마도 :

regex_str = '|'.join('(?:%s)'%re.escape(s) for s in list_of_regex_strings) 
re.search(regex_str,my_string) 

난 아직도 당신이 갈하려는 어떤 방식으로 말할 수 없다 ...

마지막으로 일치하는 정규식을 실제로 알고 싶다면

next(regex_str for regex_str in regex_str_list if re.search(regex_str,mystring)) 

정규식이 일치하지 않으면 StopIteration 예외가 발생합니다 (잡을 수 있음).

+0

그가 검색 대상 목록으로 시작하는 곳에서 그는 주어진 문자열에서 발생하는 모든 것을 찾습니다. –

+0

@ sr2222 - 6 ~ 7 번 정도 질문을 다시 읽었습니다. 아직 확실하지 않습니다 ... – mgilson

+0

"[a] 목록에있는 하나의 항목이 문자열에 있는지 찾아보십시오"라고 생각하는 단서가 있습니다. 그는 일련의 목표를 가지고 있고 그 중 하나가 문자열에 나타나는지보고 싶어합니다. 그래서 기본적으로 패턴의 or'ed 값들과 "매치"됩니다. 아니면 그냥'any (x가 문자열의 x 인 경우 대상의 x의 경우)'입니다. –

-2
for each item in list: 
    use regex on string 

질문의 일반적인 성격을 고려하여 최대한 구체적으로 지정하십시오.

편집 : 나는 그 영업 이익은 문자열의 목록에있는 한 항목이 정규식를 사용하여 패턴과 일치 여부를 확인하는 방법에 요구하고 있으리라 믿고있어

0

이 psuedocode입니다, 파이썬 없습니다.

# import the regex module 
import re 

# some sample lists of strings 
list1 = ['Now', 'is', 'the', 'time', 'for', 'all', 'good', 'men'] 
list2 = ['Me', 'Myself', 'I'] 

# a regex pattern to match against (looks for words with internal vowels) 
pattern = '.+[aeiou].+' 

# use any() around a list comprehension to determine 
# if any match via the re.match() function 
any(re.match(pattern, each) for each in list1) 

# if you're curious to determine just what is matching your expression, use filter() 
list(filter(lambda each: re.match(pattern, each) , list2)) 
관련 문제