0

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

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

foo_bar_8
foo_bar_12

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

但不是字符串,如:

foo_bar_15
foo_bar_4
foo_bar_20

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

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

4

2 回答 2

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

取决于您想要做什么,这可能非常容易 - 或非常紧张;-)

于 2013-11-01T22:02:56.507 回答
2

试试下面的表达式:

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

[89]匹配8or 9,1[01234]匹配1后跟0, 1, 2, 3or4的a

$匹配字符串的结尾。

于 2013-11-01T21:47:20.017 回答