2010-02-08 2 views
9

Ich habe this article gelesen, wo die /^1?$|^(11+?)\1+$/ Perl Regex verwendet wird, um zu testen, ob eine Zahl prime oder nicht ist.Is_Prime-Funktion über Regex in Python (von Perl)

Prozess:

s = '1' * your_number 

Wenn s die Regex matchs, dann ist es nicht prim. Wenn nicht, ist es Prime.

Wie würden Sie diese Regex in Pythons re Modul übersetzen?

+13

Nur wenn ich denke, ich habe alles gesehen ... –

+0

Ein kompakterer Haupttest ist hier vorbei http://StackOverflow.com/Questions/1805796/Code-Golf-Um-Spiral 'alle (i% d für d im Bereich (2, i)) ' –

+3

@Mike Regulärer Ausdruck, der mit Rückreferenzen übereinstimmt, ist NP-schwer: http://perl.plover.com/NPC/ –

Antwort

6

Es funktioniert wie (außer ohne die Schrägstriche an den Rändern, die in Python nicht benötigt werden):

pattern = r'^1?$|^(11+?)\1+$' 
re.match(pattern, '1'*10) #matches 
re.match(pattern, '1'*11) #doesn't match 

Der einzige Nicht-Standard-Regex-Funktion benötigt hier ist Rückreferenzierungen (\1), und diese werden unterstützt in Perl und Python.

+0

Danke, ich hatte Probleme, weil ich vergessen habe die r von –

+1

kann jemand erklären, warum die gelöschte Antwort http://stackoverflow.com/questions/2225027/is-prime-function-via-regex-in-python-von- Perl/2225069 # 2225069 ist falsch (angenommen, es wurde gelöscht, weil es falsch war)? – ysth

+0

Ich habe es gesehen. Es war nicht falsch. –