在Python中使用正则表达式提取两个给定整数之间的浮点数

时间:2018-06-21 13:05:26

标签: regex python-3.x

在我的特定情况下,我搜索的上限始终是三位数,并且都是正浮点数/整数。但是,我总能体会到一种普遍适用的解决方案。

在我看来,解决这个问题首先需要找到我们最小数量的长度。我目前有类似的东西:

# These are strings to make indexing easy
max_num = '120'
min_num = '110'

# I also check if the minmum number is 2 or 1 digits long and have special cases  
# for those but this is sufficient to show what the issue is
if len(min_height) == 3:
    regex = re.findall(
        r"[{}-{}][{}-{}][{}-{}].?\d*".format(min_num[0], max_num[0],
        min_num[1], max_num[1], min_num[2], max_num[2]), str(lines))

在这种特殊情况下,此操作失败,因为“ ones”位置未按我们需要的范围从0-9进行搜索。但是,如果我通常从0-9进行搜索,那么当我遇到类似以下内容时,它将失败:

max_num = '123'
min_num = '112'

一个简单的解决方案是检查“个”和“十”个位的区别。但是,我希望找到一种不依赖于'if'语句负载的更优雅的解决方案。

1 个答案:

答案 0 :(得分:0)

希望这可以解决您的问题

import regex
def lng(no):
    '''to find out length of a +ve number'''
    length=0
    while(True):
        no=no//10
        length=length+1
        if no==0:
            break
    return length  
#u can set any +ve number including 0 in both maxno and minno
maxno=100
minno=20
pattern=regex.compile(r'\d{%d,%d}\.\d+'%(lng(minno),lng(maxno)))
string='3289032 884.399 99.99 29.1'
ans=regex.findall(pattern,string)
ans=[x for x in ans if float(x)<maxno and float(x)>minno]
print(ans)