python - 包含数字但不包含其他数字的正则表达式
问题描述
由下面的 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
. 这将基本上通过使用负向向后看和负向向前看来查找前面没有 a-
并且后面没有a 的数字。-
这里的例子。
注意:\b
是为了确保给定 12-34,表达式不匹配1
(因为它后面没有 a -
)和4
(因为它前面没有 a -
)。