【问题标题】:Get a number with exactly x digits from string从字符串中获取恰好 x 位的数字
【发布时间】:2013-03-09 14:11:03
【问题描述】:

我正在寻找一个正则表达式模式,它匹配一个长度正好为 x 的数字(比如 x 是 2-4),仅此而已。

例子:

"foo.bar 123 456789""foo.bar 456789 123"" 123""foo.bar123 " 只能匹配“123”

所以。只有数字,没有空格、字母或其他东西。

我该怎么做?

编辑:我想在 c# 中使用 Regex.Matches() 函数来提取这个 2-4 位数字并在附加代码中使用它。

【问题讨论】:

  • \d{2,4} 怎么样?你在用什么运行正则表达式?
  • 解决方案将根据您使用的正则表达式实现而有所不同。

标签: c# regex string match digit


【解决方案1】:

任何跟随{m,n} 的模式都允许该模式出现m 到n 次。因此,在您的情况下,\d{m,n} 用于所需的 m 和 n 值。如果必须是整数,请使用\d{m}

如果要匹配 x123y 中的 123 而不是 1234 中的,请使用 \d{3}(?=\D|$)(?<=(\D|^)\d{3})

向前看以确保 3 位数字之后的字符完全是非数字,向后看以确保 3 位数字之前的字符是非数字或根本没有。

【讨论】:

  • 就像 Naveed S 说的,如果你想匹配一个正好 n 位长的数字,那么你需要使用 \d{n} 在你提供的例子中,\d{n,m}将作为每个示例中匹配的第一个数字将是 123 使用此站点来测试您的正则表达式 regexplanet.com
  • 我添加了另一个示例以使我的愿望更清晰。当 n = 3 时,\d{n} 也匹配 456 和 789。
  • @MarcoFrost 我的第二个正则表达式匹配 3 个数字,如果它们没有被任何数字包围。是你需要的吗?
  • @NaveedS 这看起来真的很棒!你的第二个正则表达式是完美的。 :)
【解决方案2】:

您可以使用基本的 RegEx 来实现这一点:

\b(\d\d\d)\b\b(\d{3})\b - 用于匹配正好为 3 位的数字

如果你想要可变数字:\b(\d{2,4})\b (explained demo here)
如果要捕获单词旁边的匹配项:\D(\d{2,4})\D (explained demo here)

\b 是单词边界(不匹配任何内容,它是零匹配字符)
\d 仅匹配数字
\D 匹配任何非数字字符
@ 987654330@ 圆括号中的所有内容都将捕获匹配项

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2022-01-13
    • 1970-01-01
    • 1970-01-01
    • 2021-05-17
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多