代码之家  ›  专栏  ›  技术社区  ›  Tim Angus

使用正则表达式从浮动指针数中除去尾随的零

  •  -1
  • Tim Angus  · 技术社区  · 6 年前

    给定输入,如:

    123000
    -123000
    1.230000000
    123.4000000
    -123.4000000
    123.0
    

    是否有一个正则表达式将匹配非尾随零部分,相应地给出如下捕获?:

    123000
    -123000
    1.23
    123.4
    -123.4
    123.0
    
    5 回复  |  直到 6 年前
        1
  •  1
  •   The fourth bird    6 年前

    \d+\.[0-9]* 它是贪婪的,将匹配到行尾,然后匹配一个数字 [1-9]

    然后使用 \K 重置报告匹配的起点。任何消耗掉的东西都不再是比赛的一部分。然后使用匹配要删除的可能的零 0* 然后用一个空字符串替换它们。

    \d+\.[0-9]*[1-9]\K0*

        2
  •  1
  •   Community leo1    4 年前

    一个可能的候选人是

    (?!00+)([+-]?\d+(\.\d?)?)(0*[1-9])*
    

    demo .

    第一个组是一个否定的lookahead,它防止选择只由两个或多个零组成的匹配字符串( 00000 或匹配尾随字符串)

    第二组匹配一个可选符号,后跟一个或多个数字、可选地后跟一个文本点和一个数字(小数点后的第一个数字可以是零,就像您在示例中所发布的那样),然后跟在集合中的一组0或多组数字后面 [1-9]

    最后,您需要得到第二个组,它限定了您感兴趣的子字符串。见 演示 了解详情。

    强制负lookahead位于左侧的非单词边界,它与链的最后零不匹配,因为新数字(连续的数字必须是不同的单词),从而导致这个新的正则表达式:

    (?!\B00+)([+-]?\d+(\.\d?)?)(0*[1-9])*
    

    从中可以看出 demo2

        3
  •  0
  •   Tim Angus    6 年前

    一种解决方案是: ^(-?\d+(?:\.\d+?[1-9]*)?)0*$

    • ( 捕获组
      • -? 可选-
      • \d+
      • (?: 非捕获组
        • \.\d+?
        • [1-9]* 零位或多个非零位数
      • )? 可选匹配组
    • )
    • 0* 零个或多个零
        4
  •  0
  •   karthik manchala    6 年前

    (\.[^0]+)0+ 
    
    and replace with \1
    

    Regex Demo

    注意:这将匹配所有 0 s在小数点后(点),但不是紧接小数点后的那个

    编辑:如果要在捕获组1中获得所需的结果,可以使用以下命令:

    ([^.\s]+(?:\.[^0]+)?)0*
    

    Regex Demo

        5
  •  0
  •   watt smith    6 年前

    可能有很多种方法。我会尽力的

    -?(\d+(?:\.[1-9]\d*?)?)0*$