使用re.compile()匹配常规整数范围

时间:2013-11-01 21:44:21

标签: python regex

如何定位re.compile()的整数范围,其中范围的限制是两个一般整数 ab

例如,假设我想要定位字符串,如:

foo_bar_8
foo_bar_12

即。最后的数字范围内8-14 a=8 b=14 )。请注意,ab是两个整数,数字位数可能不同

但不是字符串:

foo_bar_15
foo_bar_4
foo_bar_20

(最后的数字8-14范围内)

更一般地说,我有两个整数ab,其中ab的位数可能不同。如何在Python中的正则表达式中编码这样的通用范围?

2 个答案:

答案 0 :(得分:5)

正则表达式处理字符串,句点。他们不知道一串字符对你来说是什么意思。

有时可以使用re.sub()来提供意义,因为sub()传递了一个函数,它可以实现您可以编程的任何含义。例如,

import re
def matcher(m):
    digits = m.group()
    print "matched", repr(digits), "at", m.span()
    if 8 <= int(digits) <= 14:
        print "OK!"
    else:
        print "rejected"
    return digits  # no change

s = "foo_bar_8 foo_bar_12 foo_bar_15 foo_bar_4 foo_bar_20"
re.sub("\d+", matcher, s)

打印:

matched '8' at (8, 9)
OK!
matched '12' at (18, 20)
OK!
matched '15' at (29, 31)
rejected
matched '4' at (40, 41)
rejected
matched '20' at (50, 52)
rejected

根据您想要做的事情,这可能非常容易 - 或者非常紧张; - )

答案 1 :(得分:2)

尝试以下表达式:

(?:[89]|1[01234])$

[89]匹配891[01234]匹配1后跟01,{{1} }},23

4匹配字符串的结尾。