【问题标题】:Match a string with a word and a digit 1-9用一个单词和一个数字 1-9 匹配一个字符串
【发布时间】:2017-12-14 11:15:13
【问题描述】:

我的正则表达式很弱,在以下字符串的情况下

"OtherId":47
"OtherId":7
"MyId":47     (Match this one)
"MyId":7

我想提取包含“MyId”且数字不是 1 - 9 的字符串

我以为我可以使用:

RegEx: How can I match all numbers greater than 49?

结合使用: Regular Expressions: Is there an AND operator?

但它没有发生......你可以在这里看到我失败的尝试:

https://www.regextester.com/index.php?fam=99753

这是

\b"MyId":\b(?=.*^[0-10]\d)

我做错了什么?

【问题讨论】:

    标签: regex


    【解决方案1】:

    您可以使用此正则表达式匹配任何数字>= 10

    ^"MyId":[1-9][0-9]+$
    

    RegEx Demo

    如果也允许前导零,则使用:

    ^"MyId":0*[1-9][0-9]+$
    

    [1-9] 确保以1-9 开头的数字和[0-9]+ 匹配第一个数字之后的一个或多个数字。

    【讨论】:

    • 如果允许前导零,则使用^"MyId":0*[1-9][0-9]+$
    • 这里有点撕裂,因为这是对原始(未经编辑)问题的最佳答案,但 AndyG 是我目前正在使用的问题
    【解决方案2】:

    本质上,您正在寻找 2 个或更多数字:

    \"MyId\"\:(\d{2,})
    

    我已经转义了引号和冒号,{2,} 表示 2 或更多。

    【讨论】:

    • "高于 10",但 10 也会匹配 ;)
    • \d{2,} 也将匹配 0100
    • 我的错,我的问题在技术上有 2 个问题“高于 10”和 0-9 ,AndyG 是对的,我将编辑问题以减少歧义
    • 是的,我正在查看包含 ^[0-10] 的示例正则表达式,说服我查看 10 以上。
    • 这就是为什么应该有一个单一的、明确的问题:)。选择@anubhava 的答案,因为它的信息量更大且更受欢迎。我不会失眠... ;)
    【解决方案3】:

    如果您需要精确匹配任何大于 9 的数字 ^"MyId":[1-9][0-9]+$

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2011-02-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多