用于解析浮点数的正则表达式

时间:2014-05-27 03:53:06

标签: java regex

我希望制作一个解析给定字符串中所有浮点数的正则表达式。问题是我需要忽略一个特例;以/

开头的浮点数

我目前的正则表达式工作正常,但它并没有忽略完全浮动只是/

之后的数字

(?<!/)[-]?[0-9]*\.?[0-9]+

以下是一些样本:

  • 1.25一些文字/1.10更多文字:
    • 应该拿起1.25而不是1.10
  • 1一些不同的文字
    • 应该拿起1
  • 1.25一些文字/1.10更多文字
    • 应该拿起1.25而不是1.10
  • 1.25一些文字.012更多文字
    • 应该同时选择1.25和.012
  • -1.25一些文字
    • 应该拿起-1.25

提前致谢

2 个答案:

答案 0 :(得分:2)

Lookbehind 排除(/)在这里还不够,它很棘手,但你需要排除(0-9.,{ {1}})以及(-)后跟一个空格以匹配您指定的浮点数。

/

Live Demo

获取所需内容的另一种方法是匹配您不想要的上下文。匹配不需要的上下文后,在捕获组中放置您想要匹配的内容并访问该组以进行匹配。

(?<![0-9/.-]|/ )-?[0-9]*\.?[0-9]+

Live Demo

答案 1 :(得分:0)

在我看来,这是一个相当不错的Regex问题。假设您要对任何replace号码float进行/前面有regex,则以下内容将起作用。这与您的原始(?:[a-z]*|\/.*) 所做的相反,但它可能更容易实现并且更易于阅读。

<强>正则表达式

1.25 some text /1.10 some more text
1 some different text
1.25 some text .012 some more text
-1.25 some text
/1.25
/you missed one 1.10

<强> Regex101

测试数据

Java

我的str = str.replaceAll("(?:[a-z]*|\/.*)", ""); 生锈了,但示例用法是:

{{1}}