下面npinti回答。在"类似的问题"中,C#的答案毫无帮助
所以我有下面的正则表达式。我也尝试了不同的变体,但不幸的是,它不会起作用。
因此,如果我有下面的字符串,并且想要提取23, 22 and 38
。但我不希望它提取用连字符分隔且没有负数的数字:-
。
string = 'Have to find 23, but not 44-58 and definitely not 88-99 but do find 22 & 38'
my_regex = re.compile(r'(d+)|^((?![0-9]+[^-]^[0-9]+).)*$', flags=re.I)
print(my_regex.findall(string))
这基本上没有返回任何有用的结果。
您可以尝试类似的方法:b(?<!-)d+(?!-)b
。这基本上是通过使用负向后看和负向前看来查找前面没有-
、后面没有-
的数字。
此处为示例。
注意:b
是为了确保给定12-34,表达式不匹配1
(因为它后面没有-
(和4
(因为它前面没有-
(。