【问题标题】:Regular expression to include numbers but not others包含数字但不包含其他数字的正则表达式
【发布时间】:2020-08-01 10:00:10
【问题描述】:

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

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

【问题讨论】:

  • 您要查找的正是 23、22 和 38?如果没有,你能说得更具体些吗?
  • 你的正则表达式显示什么输出?
  • 负数(即this number -25 is negative)呢?
  • 是的,我想准确找到 23,22 和 38,因为它们是独立数字,没有负数

标签: python regex


【解决方案1】:

您可以尝试如下方式:\b(?<!-)\d+(?!-)\b。这将基本上通过使用负向向后看和负向向前看来查找前面没有- 并且后面没有- 的数字。

例如here

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

【讨论】:

  • 完美运行,谢谢!对于那些查看 C# 问题的人来说,那里的答案对我不起作用,所以这不是重复的。这个答案确实有效!
  • @N90J 该解决方案有效,您只需将. 替换为-ideone.com/sMz6Yo
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2011-05-12
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2023-03-15
  • 1970-01-01
相关资源
最近更新 更多