【问题标题】:regex - wrap all integers in double quotes正则表达式 - 将所有整数用双引号括起来
【发布时间】:2016-10-18 14:17:49
【问题描述】:

我要转这个字符串;

0000,0767,"078", 0785, "0723",23487, 345 , 07334

进入这个字符串;

"0000","0767","078", "0785", "0723","23487", "345" , "07334"

这是我能做到的最接近的,当涉及到正则表达式时,我总是对否定查找等感到困惑。

[^"\d,]?(\d+) 并替换为 "$1" - https://regex101.com/r/qVQYA7/1

不幸的是,对于已经有双引号的整数,这会导致双引号,就像这样;

"0000","0767",""078"","0785", ""0723"","23487","345" ,"07334"

伪逻辑是; 查找任何周围已经有双引号的整数,并添加双引号。保留逗号之间的任何空格。

【问题讨论】:

    标签: regex


    【解决方案1】:

    您只需搜索"?(\d+)"? 并将其替换为"$1"。 如果有 " 存在,它们被匹配但不包含在组中。

    【讨论】:

    • 这将是一个简单的解决方案,但是我忽略了在示例字符串中添加一些实例,例如"+232987",在这种情况下不起作用。但是,由于您的代码确实很好地回答了我的示例,因此您仍然会得到我的支持。
    【解决方案2】:

    您可以在正则表达式中使用环视来避免匹配引用的数字:

    (?<!")(\b\d+\b)(?!")
    

    Updated Regex Demo

    RegEx 拆分:

    (?<!")   # Negative lookbehind to skip the match if previous character is "
    (        # captured group #1 open
       \b    # assert word boundary
       \d+   # match 1 or more digits
       \b    # assert word boundary
    )        # captured group close
    (?!")    # Negative lookahead to skip the match if next character is "
    

    如果您使用的是 PCRE,那么您可以使用这个 PCRE 动词:

    "\d+"(*SKIP)(*F)|(\d+)
    

    【讨论】:

    • 这很完美,适合我所有的数据值。谢谢。
    【解决方案3】:

    假设在您的情况下,每个数字序列都应后跟逗号 , 或位于字符串的末尾。
    使用以下正则表达式:

    (\d+)\s*?(?=,|$)
    

    https://regex101.com/r/qVQYA7/3

    【讨论】:

    • 好答案,适合我需要的数据,但我只能接受一个答案。 ;)
    • @Novocaine,没关系
    猜你喜欢
    • 2014-09-10
    • 2019-05-11
    • 1970-01-01
    • 2015-03-06
    • 2014-05-10
    • 1970-01-01
    • 2018-12-16
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多