2016-10-22 54 views
1

我想学习正则表达式我的项目我正在使用它进行输入验证,因为我被告知使用正则表达式是做输入验证的最佳方法之一。正则表达式匹配多个坐标分隔空格

所以,我试图确保一个字符串包含未知数的坐标,它们之间用空格分隔。输入内容的例子是2,2 23.45,6 45,21.65 2,2我不确定它是否重要,但最后的坐标总是与第一个匹配。不能有任何符号或无关的空格或逗号。只有十进制数字以逗号分隔,后跟空格或结尾字符。

我意识到这可能是一个相当复杂的表达式,而且我非常喜欢跳入正则表达式,所以对此的任何帮助都会非常感谢。如果这改变了什么,我正在用C++进行编程。谢谢。

编辑:

我已经忘记了负数和换行符的可能性。我也接受输入中的负数和换行符。 所以输入-2.3,2 34,-2 -2.3,2\n是可以接受的。感谢大家到目前为止的帮助。

+0

看起来你可以有空格和逗号分隔数字。 –

+0

@TimBiegeleisen它们是技术上有序的对。所以我需要2个用逗号分隔的数字。然后如果有多于一对的有序对,则这些对由一个空格分开。 – rph020798

+0

负数,指数符号怎么样?你几乎必须自己写表达式来描述语法。是“+ 4.3, - ”。一个有效的组件? –

回答

1

你可以试试这个正则表达式:

^\d+(?:\.\d+)?,(?:\d+(?:\.\d+)? \d+(?:\.\d+)?,)*\d+(?:\.\d+)?$ 

演示在这里:

Regex101

注:\d+(?:\.\d+)?匹配任何数量的,可能有小数部分的正则表达式。括号内的?:将数量标记为非捕获组。这告诉正则表达式引擎不捕获里面的内容,因为我们不想在这里实际捕获任何东西。这可能会导致更有效的正则表达式。

+0

虽然不完整,例如签署规范和换行符,让我们假设这是答案。现在,一个不懂正则表达式的人将如何确认答案?尽管如此,它还是很慷慨的。 –

+0

我没有想过换行符,而OP也没有提到否定符号的可能性。 –

+0

+1表示regex101,允许提问者学习正则表达式,而不是试图简单地实现它。我正在为它添加书签。 –