我正在尝试创建一个正则表达式模式,该模式只匹配仅包含句点(。)的字符串,其长度为3的幂。显然,我可以手动重复3次幂的长度检查,直到长度为no更长的可行性,但我更喜欢短暂的模式。
我编写了这个python方法来帮助解释我想要做的事情:
#n = length
def check(n):
if n == 1:
return True
elif n / 3 != n / 3.0:
return False
else:
return check(n / 3)
为了澄清,正则表达式应该只匹配.
,...
,.........
,...........................
,(长度1,3,9,27)等。
我已经阅读了regex recursion,正在使用(?R)
,但我无法将任何可以正常运行的内容放在一起。
这可能吗?
答案 0 :(得分:0)
可以使用正则表达式(处理任何字符,而不仅仅是句点):
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}"
但我知道你真的想知道是否可以使用单个正则表达式完成。
更新
我忘了您要求提供递归解决方案:
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}")