代码之家  ›  专栏  ›  技术社区  ›  Jamie Marshall

regex-仅匹配围绕数值的引号

  •  1
  • Jamie Marshall  · 技术社区  · 7 年前

    所以我使用了很多正则表达式来格式化SQL。

    我用它来匹配qoutes中的数字:

    (?<=(['"])\b)(?:(?!\1|\\)[0-9]|\\.)*(?=\1)
    

    玩到目前为止,但还没有运气:

    '(?=[0-9](?='))*
    

    任何一个regex忍者都能帮我走上正轨?

    下面是一个示例字符串:

    '2018-12-09 07:29:00.0000000', 'US', 'MI', 'Detroit', '48206', '505', '68.61.112.245', '0', 'Verizon'
    

    我只想配上 ' 围绕 48206 , 505 0 这样我就可以脱光它们了。

    为了安全起见,让我们假设测试字符串中还可能出现其他字符。ie——说只要匹配任何没有破折号、字母或点的东西都是不可行的。而且问题是语言不可知的,所以任何适用的语言都是好的——JavaScript、Python、Java等等。

    3 回复  |  直到 7 年前
        1
  •  1
  •   Pushpesh Kumar Rajwanshi    7 年前

    您可以使用此正则表达式选择所有此类数字,

    '(\d+)'
    

    \1 $2 按照你的语言。

    Demo

    这将删除所有围绕数字的引号。

    让我知道这是否适合你。

    '(?=\d+')|(?<='\d+)'
    

    并将其替换为空字符串。

    Demo

        2
  •  1
  •   Community Mohan Dere    6 年前

    .split().join() 链条

    .split() 可以使用这样的正则表达式:

     /'\b([0-9]+?)\b'/
    
    • 文字匹配单引号: '

    • 元序列单词边界设置单词/数字的开头: \b

    • 捕获组: ( [ 任何数字的: 0-9]

    • 至少匹配一次,然后继续匹配,直到到达下一个单词边框,并出现一个直接的单引号: )+?\b'

    .split() g 大叶旗是不需要的。 .join(''); 被拴在 .split() 结果返回到am数组中的字符串。

    演示

    var strA = `'2018-12-09 07:29:00.0000000', 'US', 'MI', 'Detroit', '48206', '505', '68.61.112.245', '0', 'Verizon'`;
    
    var strB = strA.split(/'\b([0-9]+?)\b'/).join('');
    
    console.log(strB);
        3
  •  1
  •   The fourth bird    7 年前

    在替换中,使用第二个捕获组 $2 例如

    (['"])(\d+)\1
    

    解释

    • (['"]) 捕获组中的“或”
    • (\d+) 在组中捕获1+个数字
    • \1 第1组的反向参考

    Regex demo

    ''2018-12-09 07:29:00.0000000', 'US', 'MI', 'Detroit', 48206, 505, '68.61.112.245', 0, 'Verizon''