正则表达式仅匹配长文本中的浮点数

时间:2014-11-22 17:37:12

标签: regex

我有一个语法高亮显示器,它接受一个简单的正则表达式来应用一个样式。现在我需要提供仅匹配浮点数的正则表达式。

文字示例:

test1 -1 0 test2-1.1 0.123 -0.23 255 10.1 1-1-100.11-2

应该匹配什么: [-1],[0],[0.123],[ - 0.23] [255],[10.1]

正如您所看到的 - Stack Overflow的荧光笔错了:)最后一个表达式是一个标识符(甚至可能是文件名)。绝对不是一个数字。

非常重要的是,输入文本中的其他字符不应匹配。

我无法替换文字。使用空格或分号将数字与文本的其余部分分开。但这些角色无法匹配。

明显的尝试:

\b[-+]?[0-9]*\\.?[0-9]+\b

但这不起作用。问题与"字边界"。 " - "字符被视为非单词字符,所以首先" \ b"不匹配任何负数。最后一个" \ b"将在每个" - "之前匹配在文本中,所以在" 1-test" " 1"将被匹配为数字,这是错误的。

是否有一个更智能的锚作为" \ b"但治疗" - "作为可能的一部分?

我担心没有解决方法 - 至少使用一个正则表达式。 或者我错了,可以完成吗?

2 个答案:

答案 0 :(得分:1)

您可以使用此基于外观的正则表达式:

(?<= |^)[-+]?[0-9]+(?:\.[0-9]+)?(?= |$)

RegEx Demo

答案 1 :(得分:1)

环顾四周可能很有用

(?<=\s)[+-]?[\d.]+(?=\s|$)

例如:

http://regex101.com/r/yE9uJ4/1