在我的特定情况下,我搜索的上限始终是三位数,并且都是正浮点数/整数。但是,我总能体会到一种普遍适用的解决方案。
在我看来,解决这个问题首先需要找到我们最小数量的长度。我目前有类似的东西:
# 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'语句负载的更优雅的解决方案。
答案 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)