【问题标题】:Regex for matching everything except multi digit numbers用于匹配除多位数字之外的所有内容的正则表达式
【发布时间】:2025-12-02 12:20:10
【问题描述】:

有人可以为我提供一个正则表达式来匹配字符串中除多位数字之外的所有内容吗?

示例字符串:a hello 656554 ho5w are you

在上面的例子中,除了656554 之外的所有数字都应该匹配。 how 中的数字 5 也应该匹配。

我试过这个:((?![0-9]{2,}).) 但这也与656554 中的4 匹配。

编辑:这是我尝试过的。 https://regex101.com/r/Jm2GTW/1

编辑2:请通过上面的链接一次。

【问题讨论】:

  • 5 in ho5w 不是多位数字。请更好地定义您的预期结果
  • 您可能想删除字符串中的多位数字(即,将它们替换为空)。你写的东西用正则表达式是不可能的。
  • @GalAbra 抱歉。我的错。我的意思是应该匹配。立即更新。
  • @virolino 我试图单独使用正则表达式。真的不行吗?
  • 当你说“一切”时,你是什么意思?你想去掉数字并返回没有它们的字符串还是匹配每个单词?你想要什么样的输出?澄清一下,"foo 1 bar 22 baz qu88x",我们想要生成"foo 1 bar baz qu88x"

标签: regex


【解决方案1】:

根据您实际使用的数据,这种模式似乎有效

(\D+\d?\D)

但是只有一个数字的字符串会被分解。

Regex Demo

【讨论】:

  • 看起来确实如此。但不适用于我尝试过的字符串。我的问题中的链接。
  • 也许使用\D 而不是[a-zA-Z]?它会杀死所有不是字母或单个数字的东西。另外,我不确定 OP 是否需要几场比赛。
  • @kcsujeet 什么不起作用?我提供的正则表达式演示表明它有效?
  • @Shar1er80 请查看here
【解决方案2】:

正则表达式:

\d{2,}

替换为空(即删除)。

测试here

【讨论】:

    【解决方案3】:

    假设你想单独匹配每个单词(用空格分隔),你可以使用the following regex

    \b\d\b|\b(?:[^\d\s]*?\d?[^\d\s])+\b
    

    它符合以下两种情况之一:

    1. 一个数字。
    2. 一个词不包含 2 个连续的数字。

    【讨论】:

      【解决方案4】:

      试试\D*(?<=\D|^)\d?(?=\D|$)\D*

      解释:

      \D* - 匹配零个或多个非数字

      (?<=\D|^) - poisitve lookbehind:断言前面是非数字或字符串的开头^

      \d? - 匹配零和一位数

      (?=\D|$) - 正向前瞻:断言后面是非数字或字符串结尾$

      Demo

      【讨论】:

        最近更新 更多