【问题标题】:Standalone numbers Regex?独立数字正则表达式?
【发布时间】:2022-01-08 04:10:02
【问题描述】:

我目前使用这个正则表达式:

(\d+)

我可以得到 2 个字符串的问题:

“2112343 和很多 4.99”

“4.99 和很多 2112343”

我从这两个方面都得到了这个:

[2112343, 4, 99]

我只需要 2112343... 我怎样才能做到这一点?

【问题讨论】:

  • 它确实得到“仅数字”。也许您的意思是改写标题?
  • @pst 确切地说,它只获取数字序列,因此是\d
  • 如果你知道你在寻找什么 - 为什么你需要找到它?
  • \d 代表数字,不包括小数点。
  • @JonClements 这是一个例子,显然不是唯一的例子。

标签: c# python regex numbers


【解决方案1】:

试试这个

(?<![0-9.])\d+(?![0-9.])

它使用模式

(?<!prefix)position(?!suffix)

其中(?&lt;!prefix)position 表示:匹配位置不跟随前缀。

position(?!suffix) 表示:匹配位置而不是前面的后缀。

最后[0-9.] 表示:任何数字或小数点。

【讨论】:

    【解决方案2】:

    正如我在评论中所说:

    (?:^| )(\d+)(?:$| )
    

    它将匹配所有完全由数字组成的“单词”(单词是由空格字符和/或字符串的开头/结尾包围的非空格字符的字符串。)

    【讨论】:

      【解决方案3】:
      >>>r = re.match("\d+", "23423 in 3.4")
      >>>r.group(0)
      '23423'
      

      【讨论】:

      • 这样的解决方案只适用于这种特定情况。我怀疑 OP 想要一个只适用于这种格式的字符串的解决方案。
      • 我不认为那是 op 想要的。这只是他示例中的第一个数字...
      【解决方案4】:

      如果我理解正确,您也希望将这些数字与内部的一个点相匹配,但不希望在结果集合中包含这些数字。

      我会通过 2 个步骤来解决这个问题,首先选择所有数字,包括带点的数字:

      (\d+(?:\.\d+)*)
      

      然后过滤掉所有不是纯数字的东西,并使用您的第一个正则表达式并将其应用于第一步生成的集合的每个项目:

      (\d+)
      

      【讨论】:

      • 我同意这种做法;试图提出一个过于复杂的正则表达式没有意义......但是我会使用[\d.]+作为初始选择器。
      • @pst:问题是我们是否要处理“123”。随心所欲。您的选择器会匹配它,并在第二步中将其丢弃。我的选择器将匹配“123”并最终保留它。 op 应该在这里决定什么最适合这个问题......
      【解决方案5】:

      试试这个

      (?<!\S)\d+(?!\S)
      

      这只会匹配整数

      【讨论】:

        【解决方案6】:

        使用环视,您可以将捕获限制为仅不被其他数字或小数点包围的数字:

        (?<![0-9.])(\d+)(?![0-9.])
        

        或者,如果您只想匹配独立数字(例如,如果您不想匹配 abc123def 中的 123):

        (?<!\S)\d+(?!\S)
        

        【讨论】:

        • 故意不匹配。
        • 它匹配hello 1234 world -> 1234 因为空白字符不在[0-9.] 中,因此满足了环视。你知道环视是如何工作的吗? regular-expressions.info/lookaround.html
        • RegexPal 不使用 C# 正则表达式;它使用 JavaScript 正则表达式。两者不一样。具体来说,JavaScript 正则表达式不支持负向回溯。
        • 如果我想要一个正则表达式,它将从此获得 123:“p123”但不从中获得 1, 23:“1.23”?
        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 2017-02-04
        • 2010-09-08
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多