3

我正在尝试验证遵循以下模式的文本:

  • 必须以文本“point(”开头
  • 后面必须跟一个最多 5 位小数的纬度数值(例如:42.12345)
  • 后面必须用逗号“,”
  • 后面必须跟一个最多 5 位小数的经度数值(例如:-81.12345)
  • 后面必须有一个右括号“)”

匹配示例:

  • 点(42.12345,-81.12345)

任何帮助是极大的赞赏。

谢谢。

4

4 回答 4

4

您可以在此处稍作分解,轻松构建您的正则表达式。

  • point(要在开头匹配,请使用 -^point\(
  • 要匹配纬度或经度数字,请使用 -[-]?\d+(?:\.\d+)?
  • 再次,为了匹配)最后,使用\)$.

对于[-]?\d+(?:\.\d+)?,这里有一个解释:-

  • [-]? - 匹配negative (-)开头的可选符号(? quantifier结尾表示 0 或 1)
  • \d+ - 匹配一位或多位数字
  • (?:\.\d+)? - 匹配一个可选的decimal,后跟one or more digits. dot(.) 是 Regex 中的特殊元字符,因此如果要匹配它,则需要对其进行转义。

此外,要将您的位数限制为5,您可以使用 -\d{1,5}而不是\d+,它匹配最小 1 位和最大 5 位数字。

^(caret)$(dollar)anchors 匹配字符串的开头和结尾。

所以,这是你的正则表达式: -

^point\([-]?\d+(?:\.\d{1,5})?,[-]?\d+(?:\.\d{1,5})?\)$
于 2012-12-11T17:11:26.737 回答
2

试试这个:

^point\(\-?\d+\.\d{1,5},\-?\d+\.\d{1,5}\)$
  • 必须以文本“point(”开头:^point\(
  • 后面必须跟一个最多 5 位小数的纬度数值(例如:42.12345):\-?\d+\.\d{1,5}
  • 后面必须跟一个逗号“,”:,
  • 后面必须跟一个最多 5 位小数的经度数值(例如:-81.12345):\-?\d+\.\d{1,5}
  • 后面必须有一个右括号“)”:\)$

纬度和经度逻辑可以像这样进一步分解。

  • \-?= 如果存在,则匹配负号(必须转义,\因为-在 RegEx 中具有特殊含义)
  • \d+= 匹配一个或多个十进制字符(即0通过9
  • \.= 匹配句号(.单独有特殊含义,必须转义)
  • \d{1,5}= 匹配一到五个十进制字符
于 2012-12-11T17:12:04.507 回答
1

像这样的东西:

point\((?<lat>-?\d+\.\d{1,5}),(?<long>-?\d+\.\d{1,5})\)

尝试使用正则表达式工具,例如 expresso:http ://www.ultrapico.com/Expresso.htm

于 2012-12-11T17:12:39.847 回答
0

怎么样:

^point\((\-?\d+(\.\d+)?),\s*(\-?\d+(\.\d+)?)\)$
于 2012-12-11T17:11:10.223 回答