2016-04-19 3 views
-1

Ich versuche, ein Regex-Muster zu erstellen, das nur Zeichenfolgen mit nur Punkten (.) Mit einer Länge von einer Potenz von 3 entspricht. Natürlich könnte ich Längenprüfungen gegen Potenzen von 3 wiederholen, bis die Länge nicht mehr ist Machbar, aber ich würde ein kurzes Muster bevorzugen.Rekursive Regex, um zu überprüfen, ob die Stringlänge eine Potenz von 3 ist?

Ich schrieb dieses Python-Methode erklären zu helfen, was ich tun möchte:

#n = length 
def check(n): 
    if n == 1: 
     return True 
    elif n/3 != n/3.0: 
     return False 
    else: 
     return check(n/3) 

die Regex Um zu klären, nur ., ..., ........., ..........................., (Länge 1, 3, 9, 27 entsprechen sollte) usw.

Ich habe auf regex recursion gelesen, (?R) verwendend, aber ich bin nicht in der Lage gewesen, etwas zusammenzubringen, das richtig funktioniert.

Ist das möglich?

def length_power_three(string): 

    regex = r"." 

    while True: 
     match = re.match(regex, string) 

     if not match: 
      return False 

     if match.group(0) == string: 
      return True 

     regex = r"(?:" + regex + r"){3}" 

Aber ich verstehe Sie wirklich wissen wollen, wenn es mit einem einzigen Regex getan werden kann:

+0

@ WiktorStribiżew meinen Beitrag aktualisiert, zu klären, sollte nur Punkte enthalten. Bsp .: '...' (3), '.........', (9) usw. –

+0

Ja, ich sehe, und das ist mit Regex nicht möglich. Es hat keine "Pow-Power" :( –

+0

Ich wäre erstaunt, wenn das möglich wäre. Was lässt dich denken, dass es ist? – EJP

Antwort

0

Es kann mit regex (Griffe jedes Zeichen, nicht nur Zeit) erfolgen.

UPDATE

Ich habe vergessen, dass Sie für eine rekursive Lösung gefragt:

def length_power_three(string, regex = r"."): 
    match = re.match(regex, string) 

    if not match: 
     return False 

    if match.group(0) == string: 
     return True 

    return length_power_three(string, r"(?:" + regex + r"){3}") 
Verwandte Themen