我正在尝试使用正则表达式来匹配以这种格式匹配的数字中的点和短划线: 00.000-0
我将使用两个步骤:首先检查数字是否采用此格式 00.000-0
然后仅匹配点和破折号,我将使用正则表达式模式,如 [^\d]
或 [\.\-]
.
但是我试图在一个步骤中使用正则表达式模式,它匹配前两个数字后面的点和后面分别有两个数字,点和三个数字的破折号 .
首先,我在 regex101.com
尝试了积极的前瞻,类似于 (?=\d\d)\.(?=\d\d\d)\-
,但它没有用 . 然后我尝试了 (?=\d\d)\.
,所以至少我试着点 .
看看前瞻是否有效,但它再次无法正常工作 .
我在 Regular-Expressions.info
中读到了,显然,我试过的前瞻格式是正确的 .
还有其他我可以做的,它与点和短划线相匹配,仅适用于这种格式: 00.000-0
?
1 回答
您可以捕获捕获组
()
中的点和破折号 .从字符串的开头
^
匹配2位[0-9]{2}
,然后捕获(\.)
捕获组1中的点,匹配3位[0-9]{3}
并捕获组中的破折号(-)
并最终匹配行末尾的数字[0-9]
$
^[0-9]{2}(.)[0-9]{3}(-)[0-9]$
如果您的引擎支持lookbehinds,那么只匹配点和破折号的选项可以匹配点或连字符,如果在左侧和右侧是您期望的模式 .
(?<=^\d{2}).(?=\d{3}-\d$)|(?<=^\d{2}.\d{3})-(?=\d$)