我正在尝试验证遵循以下模式的文本:
- 必须以文本“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+)?)\)$