Попробуйте это:
def digit_match_greater(n):
digits = str(n)
variations = []
# Anything with more than len(digits) digits is a match:
variations.append(r"\d{%d,}" % (len(digits)+1))
# Now match numbers with len(digits) digits.
# (Generate, e.g, for 15, "1[6-9]", "[2-9]\d")
# 9s can be skipped -- e.g. for >19 we only need [2-9]\d.
for i, d in enumerate(digits):
if d != "9":
pattern = list(digits)
pattern[i] = "[%d-9]" % (int(d) + 1)
for j in range(i+1, len(digits)):
pattern[j] = r"\d"
variations.append("".join(pattern))
return "(?:%s)" % "|".join("(?:%s)" % v for v in variations)
Оказалось, проще сделать так, чтобы оно совпадало с числами, большими, чем параметр, поэтому, если вы дадите ему 15, он вернет строку для совпадающих чисел от 16 и более, в частности ...
(?:(?:\d{3,})|(?:[2-9]\d)|(?:1[6-9]))
Затем вы можете подставить это в выражение вместо \d+
, например:
exp = re.compile(r"page%s\.html" % digit_match_greater(last_page_visited))