【问题标题】:Regex for extracting digits in a string not in a word and not separated by a symbol?正则表达式用于提取字符串中的数字而不是单词而不是用符号分隔?
【发布时间】:2021-05-13 07:32:01
【问题描述】:

我想从搜索查询中提取 ID,但我不知道 ID 的长度。

从这个输入我想得到不在单词中的数字和没有用符号分隔的数字。

12 11231390 good123e41 12he12o1 1391389 dajue1290a 12331 12-10 1.2 test12.0why 12+12 12*6 2d1139013 09`29 83919 1

我要回来了

12 11231390 1391389 12331 83919 1

到目前为止,我已经尝试过 /\b[^\D]\d*[^\D]\b/gm,但我得到了符号之间的数字,但最后没有得到 1。

【问题讨论】:

    标签: regex search


    【解决方案1】:

    您可以在空白边界之间重复匹配数字。使用单词边界 \b 会给你部分匹配。

    请注意,[^\D]\d 相同,并且至少需要一个字符。

    你的模式可以写成\b\d\d*\d\b,你可以看到你没有得到最后的1,因为你的模式至少匹配2位数字。

    (?<!\S)\d+(?:\s+\d+)*(?!\S)
    

    模式匹配:

    • (?&lt;!\S) 否定后视,向左断言空白边界
    • \d+(?:\s+\d+)* 匹配 1+ 个数字,并可选择重复匹配 1+ 个空白字符和 1+ 个数字。
    • (?!\S) 负前瞻,断言右边的空白边界

    Regex demo

    如果不支持环视,您可以使用与捕获组匹配

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

    Regex demo

    【讨论】:

      猜你喜欢
      • 2017-03-07
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2013-10-06
      • 2013-04-21
      • 1970-01-01
      • 1970-01-01
      • 2012-10-11
      相关资源
      最近更新 更多