此模式需要正则表达式:点(纬度,经度)

时间:2012-12-11 17:08:10

标签: c# regex

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

  • 必须有文字“point(”在开头
  • 必须使用最多5位小数的纬度数值(例如:42.12345)
  • 必须用逗号“,”
  • 跟着它
  • 必须使用最多5位小数的经度数值(例如:-81.12345)
  • 必须使用右括号“)”

匹配示例:

  • 点(42.12345,-81.12345)

非常感谢任何帮助。

感谢。

4 个答案:

答案 0 :(得分:4)

您可以在这里稍微分解一下,轻松构建正则表达式。

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

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

  • [-]? - 匹配起始处的可选negative (-)符号(最后? quantifier表示0或1)
  • \d+ - 匹配一个或多个数字
  • (?:\.\d+)? - 匹配可选的decimal,后跟one or more digits。点(。)是Regex中的一个特殊元字符,所以如果你想匹配它,你需要转义它。

另外,要将您的位数限制为5,您可以使用 - \d{1,5}代替\d+,它匹配最小1位和最多5位数。

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

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

^point\([-]?\d+(?:\.\d{1,5})?,[-]?\d+(?:\.\d{1,5})?\)$

答案 1 :(得分: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+ =匹配一个或多个十进制字符(例如09
  • \. =匹配句点(.单独有特殊含义,必须逃避它)
  • \d{1,5} =匹配一到五个十进制字符

答案 2 :(得分:1)

这样的事情:

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

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

答案 3 :(得分:0)

怎么样:

^point\((\-?\d+(\.\d+)?),\s*(\-?\d+(\.\d+)?)\)$