【问题标题】:Regex expression to match multiple coordinates separated by spaces正则表达式匹配由空格分隔的多个坐标
【发布时间】:2016-10-22 16:51:12
【问题描述】:

我正在尝试为我的项目学习正则表达式,以便将其用于输入验证,因为有人告诉我,使用正则表达式是进行输入验证的最佳方法之一。

所以,我试图确保一个字符串包含未知数量的坐标,这些坐标由空格分隔。输入的示例是2,2 23.45,6 45,21.65 2,2 我不确定它是否重要,但最后一个坐标将始终与第一个坐标匹配。不能有任何符号或多余的空格或逗号。只有十进制数字用逗号分隔,后跟空格或结束符。

我意识到这可能是一个相当复杂的表达式,而且我几乎是盲目地跳入正则表达式,所以对此的任何帮助将不胜感激。如果这改变了任何东西,我正在用 C++ 编程。谢谢。

编辑:

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

【问题讨论】:

  • 似乎您可以使用空格和逗号分隔数字。
  • @TimBiegeleisen 它们在技术上是有序的。所以我需要两个用逗号分隔的数字。然后如果有超过 1 个有序对,则用空格分隔。
  • 负数,指数符号呢?您几乎必须自己编写表达式来描述语法是什么。是“+4.3,-。”一个有效的组件?
  • @JohnGriffin 抱歉,负数也可以接受。我忘记了。

标签: c++ regex validation input


【解决方案1】:

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

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

演示在这里:

Regex101

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

【讨论】:

  • 虽然不完整,例如签署规范和换行符,让我们假设这就是答案。现在,不懂正则表达式的人如何确认答案?不过,你还是很慷慨的。
  • 我没有想到换行符,OP也没有提到否定的可能性。
  • +1 for regex101,让提问者学习 regex 而不是简单地完成它。我正在为它添加书签。
  • 谢谢你。这似乎适用于我的要求。我将如何调整它以适用于负数?我忘记了负面的可能性。此外,有可能存在换行符。对于我的问题中的这些疏忽,我深表歉意。
  • 在搞砸了一段时间后,^-?\\d*\\.{0,1}\\d+(?:\\.\\d+)?,(?:-?\\d*\\.{0,1}\\d+(?:\\.\\d+)? -?\\d*\\.{0,1}\\d+(?:\\.\\d+)?,)*-?\\d*\\.{0,1}\\d+(?:\\.\\d+)? 似乎也适用于负数和正数。非常感谢你的帮助。没有你,我无法做到。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2023-03-28
相关资源
最近更新 更多