2016-05-04 13 views
-3

Ich arbeite an einem einfachen Fall, wo ich in einer given_text auf das Vorhandensein einer Zeichenfolge (sagen wir xyz) überprüfen muss.Python effiziente Musterfindung: Regex v/s Muster in Text?

Was eine effizientere Art und Weise sein wird, dies zu tun:

if 'xyz' in given_text: 
    print 'found' 

ODER

import re 
if re.compile('xyz').search(given_text): 
    print 'found' 
+2

Verwenden Sie [Zeit] (https://docs.python.org/3/library/timeit.html). – Phillip

+0

1. Es ist wahrscheinlich egal. 2. Wenn Sie empirisch feststellen, dass dies für Ihren Fall von Bedeutung ist, führen Sie einige Tests für reale Daten durch. 3. "xyz" in given_text ist wahrscheinlich viel schneller. – TigerhawkT3

Antwort

1

Als jemand sagte, in ist viel schneller

>>> timeit.timeit('"xyz" in "abcxyz"', number=10000000) 
0.5210642332803808 
>>> timeit.timeit('re.search(p,"abcxyz")', number=10000000, setup='import re; p=re.compile("xyz")') 
15.548494171928667 
>>> timeit.timeit('p.search("abcxyz")', number=10000000, setup='import re; p=re.compile("xyz")') 
3.41808299957313 

Ich denke, das liegt daran, in muss nur in der Zeichenfolge suchen. regex ist ein komplexeres Tool, das in der Lage sein sollte, komplexere Fälle zu verwalten, so dass es aufgrund des Overheads zur Bewältigung dieser Komplexität wahrscheinlich langsamer ist.

+1

Wissen Sie, warum das so ist? – syntonym

+0

Und sollte es nicht 'p.search (" abcxyz ")' oder 're.search (compiled_regex, string)' auch die kompilierte Regex wiederverwenden? – syntonym

+0

'p.search' ist schneller und ich fügte in dem Beispiel hinzu, danke für das Hinzeigen. Ich fügte auch eine Art Erklärung hinzu. – Francesco

-1

Wir können Python Regular Expression Search-Modul verwenden, um es auf effiziente Weise zu erledigen.

import re 
matchobj = re.search(r"xyz",given_text) 
if matchobj: 
    print "Found" 
else: 
    print "Not Found"