Python正则表达式搜索数字范围

Python正则表达式搜索数字范围,python,regex,search,Python,Regex,Search,我似乎找不到这条线索,但它看起来应该很简单。我试图使用正则表达式在输出中搜索一行数字0-99,并执行一个操作,但如果数字为100,则会执行另一个操作。以下是我尝试过的(简化版): 我尝试过这个方法,但它仍然会选择100并打印错误。这个:\d[0-99]表示一个数字(\d),后跟一个数字(0-9)或9)。如果在[0-99]的数值范围之后,则需要使用类似于\b\d{1,2}\b的内容。这将匹配由1或2位数字组成的任何数值。0-99: >>> s='\n'.join(["line {

我似乎找不到这条线索,但它看起来应该很简单。我试图使用正则表达式在输出中搜索一行数字0-99,并执行一个操作,但如果数字为100,则会执行另一个操作。以下是我尝试过的(简化版):


我尝试过这个方法,但它仍然会选择100并打印错误。

这个:
\d[0-99]
表示一个数字(
\d
),后跟一个数字(
0-9
)或
9
)。如果在
[0-99]
的数值范围之后,则需要使用类似于
\b\d{1,2}\b
的内容。这将匹配由1或2位数字组成的任何数值。

0-99:

>>> s='\n'.join(["line {} text".format(i) for i in range(-2,101) ])
>>> import re
>>> re.findall(r'(?<!\-)\b(\d\d|\d)\b', s)
['0', '1', '2', '3', '4', '5', '6', '7', '8', '9', '10', '11', '12', '13', '14', '15', '16', '17', '18', '19', '20', '21', '22', '23', '24', '25', '26', '27', '28', '29', '30', '31', '32', '33', '34', '35', '36', '37', '38', '39', '40', '41', '42', '43', '44', '45', '46', '47', '48', '49', '50', '51', '52', '53', '54', '55', '56', '57', '58', '59', '60', '61', '62', '63', '64', '65', '66', '67', '68', '69', '70', '71', '72', '73', '74', '75', '76', '77', '78', '79', '80', '81', '82', '83', '84', '85', '86', '87', '88', '89', '90', '91', '92', '93', '94', '95', '96', '97', '98', '99']
>>s='\n'.join([“行{}文本”。范围(-2101)]中i的格式(i)
>>>进口稀土

>>>关于findall(r’(?您可以通过对数字测试重新排序,并在测试2位数字时使用
elif
而不是
if
来简化正则表达式

for line in output:
    if re.search("Rebuild status:  percentage_complete", line): 
        if re.search("100", line):
            print "complete"
        elif re.search(r"\d{1,2}", line): 
            print "error"
仅当“100”测试失败时,才执行2位数字的测试

对于
r“\d{1,2}”
来说,使用原始字符串并不是绝对必要的,但是对于任何包含反斜杠的正则表达式,使用原始字符串是一个好习惯

注意,Python中的条件不需要括号,因此使用它们只会增加不必要的混乱



正如dawg在评论中提到的,对“100”的测试可以收紧到
re.search(r“\b100\b”,第行)
,但如果我们可以保证只测试0-100范围内的整数百分比,则不需要这样做。

是的,我也尝试过,但当它发现错误时仍会打印错误100@bladexeon:问题是
100
在技术上是该正则表达式的有效匹配项(它将匹配
10
)的值。我已经修改了表达式以包含单词边界(即
\b
)来解决这个问题。您的方法最有意义,但我无法使边界起作用。因此,我改为:
如果重新搜索(\d{1,2}),行)而不是重新搜索(“100”,行):
这似乎很有效。谢谢你的帮助!@bladexeon:如果是这样,那么我建议按照PM 2Ring的建议去做。你的方法让我想到了另一个:匹配
\d+
。将匹配的组转换为
int
,并用数字而不是正则表达式进行比较。它使用正则表达式表示它擅长的内容,但处理数字作为数字而不是文本。@StevenRumbalski:我认为这样会更有效,因为它减少了执行的正则表达式搜索的数量。Oto,我们可以用一个简单的
str.find(“100”)
…注意
re.search(“100”,第行)来代替对“100”的搜索
将匹配
1000
-100
100.5
等。应该是
re.search(r“\b100\b”,line)
@dawg:很好,但我很懒,因为数字是百分比,所以这些可能性不会发生。
for line in output:
    if re.search("Rebuild status:  percentage_complete", line): 
        if re.search("100", line):
            print "complete"
        elif re.search(r"\d{1,2}", line): 
            print "error"