2013-02-26 15 views
5

Próbuję użyć wyrażenia python na adres URL ciąg.Python regex - różnica między wyszukiwaniem i znajdowanie wszystkich

id= 'edu.vt.lib.scholar:http/ejournals/VALib/v48_n4/newsome.html' 
>>> re.search('news|ejournals|theses',id).group() 
'ejournals' 
>>> re.findall('news|ejournals|theses',id) 
['ejournals', 'news'] 

podstawie docs na http://docs.python.org/2/library/re.html#finding-all-adverbs, to mówi search() dopasowuje pierwszy i znaleźć wszystkie mecze wszystkich możliwych te w ciągu.

Zastanawiam się, dlaczego "nowości" nie są przechwytywane podczas wyszukiwania, mimo że jest ono zadeklarowane jako pierwsze we wzorcu.

Czy użyłem niewłaściwego wzoru? Chcę wyszukać, jeśli którekolwiek z tych słów kluczowych występuje w ciągu znaków.

Odpowiedz

1

Myślisz o tym do tyłu. Wywołanie przechodzi przez ciąg docelowy, szukając "news" OR "ejournals" OR "theses" i zwraca pierwszy znaleziony. W tym przypadku "ejournals" pojawia się jako pierwszy w ciągu docelowym.

+0

Dziękuję. Mój zły, nie myślałem o tym. – kich

2

Funkcja re.search() zatrzymuje się po pierwszym wystąpieniu, który spełnia warunek, a nie pierwszej opcji we wzorze.

Powiązane problemy