【问题标题】:Regex: Match dot and dash in a 5 digit number正则表达式:匹配 5 位数字中的点和破折号
【发布时间】:2018-11-15 03:12:39
【问题描述】:

我正在尝试使用正则表达式仅匹配以这种格式匹配的数字中的点和破折号: 00.000-0

我会使用两步法:首先检查数字是否采用这种格式00.000-0,然后只匹配点和破折号,我会使用像[^\d][\.\-] 这样的正则表达式模式。

但我试图在一个步骤中使用一个正则表达式模式,它匹配前两位数字后面的点和破折号,后面分别是两位数字、点和三位数字。

首先,我在regex101.com 中尝试了积极的前瞻,比如(?=\d\d)\.(?=\d\d\d)\-,但它没有用。然后我尝试了(?=\d\d)\.,所以至少我尝试了点. 以查看前瞻是否有效,但它再次无效。

我阅读了Regular-Expressions.info,显然我尝试的前瞻格式是正确的。

我还能做什么,它匹配点和破折号,仅适用于这种格式:00.000-0

【问题讨论】:

    标签: regex regex-lookarounds


    【解决方案1】:

    您可以在捕获组() 中捕获点和破折号。

    从字符串^开头匹配2位[0-9]{2},然后在捕获组1中捕获(\.)点,匹配3位[0-9]{3}并在捕获组2中捕获破折号(-),最后在行尾匹配一个数字[0-9] $

    ^[0-9]{2}(\.)[0-9]{3}(-)[0-9]$

    如果您的引擎支持lookbehinds,则仅匹配点和破折号的选项可以是匹配点或连字符(如果左侧和右侧是您所期望的模式)。

    (?<=^\d{2})\.(?=\d{3}-\d$)|(?<=^\d{2}\.\d{3})-(?=\d$)

    【讨论】:

    • 谢谢伙计,但不幸的是,我使用 VBA(VBScript Regex),并且lookbehinds 不起作用,并且第一个代码无法按预期工作。我做了两步:使用正则表达式检查数据是否正确,然后删​​除点和破折号
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多