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:
@ WiktorStribiżew meinen Beitrag aktualisiert, zu klären, sollte nur Punkte enthalten. Bsp .: '...' (3), '.........', (9) usw. –
Ja, ich sehe, und das ist mit Regex nicht möglich. Es hat keine "Pow-Power" :( –
Ich wäre erstaunt, wenn das möglich wäre. Was lässt dich denken, dass es ist? – EJP