首页 > 解决方案 > 包含数字但不包含其他数字的正则表达式

问题描述

由下面的 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))

这基本上没有返回任何有用的东西。

标签: pythonregex

解决方案


你可以尝试这样的事情:\b(?<!-)\d+(?!-)\b. 这将基本上通过使用负向向后看和负向向前看来查找前面没有 a-并且后面没有a 的数字。-

这里的例子。

注意:\b是为了确保给定 12-34,表达式不匹配1(因为它后面没有 a -)和4(因为它前面没有 a -)。


推荐阅读