我正在尝试验证遵循以下模式的文本:
- 必须以文本“point(”开头
- 后面必须跟一个最多 5 位小数的纬度数值(例如:42.12345)
- 后面必须用逗号“,”
- 后面必须跟一个最多 5 位小数的经度数值(例如:-81.12345)
- 后面必须有一个右括号“)”
匹配示例:
- 点(42.12345,-81.12345)
任何帮助是极大的赞赏。
谢谢。
您可以在此处稍作分解,轻松构建您的正则表达式。
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})?\)$
试试这个:
^point\(\-?\d+\.\d{1,5},\-?\d+\.\d{1,5}\)$
^point\(\-?\d+\.\d{1,5},\-?\d+\.\d{1,5}\)$纬度和经度逻辑可以像这样进一步分解。
\-?= 如果存在,则匹配负号(必须转义,\因为-在 RegEx 中具有特殊含义)\d+= 匹配一个或多个十进制字符(即0通过9)\.= 匹配句号(.单独有特殊含义,必须转义)\d{1,5}= 匹配一到五个十进制字符像这样的东西:
point\((?<lat>-?\d+\.\d{1,5}),(?<long>-?\d+\.\d{1,5})\)
尝试使用正则表达式工具,例如 expresso:http ://www.ultrapico.com/Expresso.htm
怎么样:
^point\((\-?\d+(\.\d+)?),\s*(\-?\d+(\.\d+)?)\)$