使用regex(python re)在字符串中搜索非零正整数

Search for non-zero positive integers in a string using regex (python re)

我尝试运行此代码,从Python中的字符串中提取非零正整数:

1
2
3
4
5
6
7
#python code
import re
positive_patron = re.compile('[0-9]*\.?[0-9]+')
string = '''esto si esta en level 0 y extension txt LEVEL0.TXT  
            2 4 5 6 -12  -43  1 -54s esto si esta en 1 pero es
            txt  69 con extension txt y profunidad 2'''

print positive_patron.findall(string)

这就产生了输出['0', '0', '2', '4', '5', '6', '12', '43', '1', '54', '1', '69', '2']

但是,我不想匹配0或负数,我希望输出为ints,就像这样:[2,4,5,6,1,1,69,2]

有人能告诉我如何做到这一点吗?


使用单词boundary转义序列\b,这样它就不会与周围有其他字母数字字符的数字匹配。还可以使用负向后视来禁止领先的-

1
positive_patron = re.compile(r'\b(?<!-)\d*\.?\d+\b')

演示

要跳过0,请在使用regexp之后使用过滤器执行此操作。

1
2
numbers = positive_patron.findall(string)
numbers = [int(x) for x in numbers if x != '0']