【问题标题】:Regex how to match an optional character正则表达式如何匹配可选字符
【发布时间】:2011-04-29 18:27:28
【问题描述】:

我有一个正则表达式,我认为它直到现在都可以正常工作。我需要匹配一个可选字符。它可能存在,也可能不存在。

这里有两个字符串。上面的字符串匹配,而下面的不匹配。较低的字符串中缺少一个字母是导致它失败的原因。

我想在开始的 5 位数字之后获取单个字母,如果它在那里,如果没有,继续获取字符串的其余部分。这封信可以是A-Z

如果我从正则表达式中删除 ([A-Z]{1}) +.*? +,它将匹配我需要的所有内容,但字母很重要。

20000      K               Q511195DREWBT            E00078748521
30000                      K601220PLOPOH            Z00054878524

这是我正在使用的正则表达式。

/^([0-9]{5})+.*? ([A-Z]{1}) +.*? +([A-Z]{1})([0-9]{3})([0-9]{3})([A-Z]{3})([A-Z]{3}) +([A-Z])[0-9]{3}([0-9]{4})([0-9]{2})([0-9]{2})/

【问题讨论】:

    标签: regex string operators


    【解决方案1】:

    使用

    [A-Z]?
    

    使字母可选。 {1} 是多余的。 (当然你也可以写[A-Z]{0,1},意思是一样的,但这就是?的用途。)

    你可以改进你的正则表达式

    ^([0-9]{5})+\s+([A-Z]?)\s+([A-Z])([0-9]{3})([0-9]{3})([A-Z]{3})([A-Z]{3})\s+([A-Z])[0-9]{3}([0-9]{4})([0-9]{2})([0-9]{2})
    

    而且,由于在大多数正则表达式方言中,\d[0-9] 相同:

    ^(\d{5})+\s+([A-Z]?)\s+([A-Z])(\d{3})(\d{3})([A-Z]{3})([A-Z]{3})\s+([A-Z])\d{3}(\d{4})(\d{2})(\d{2})
    

    但是:您真的需要 11 个单独的捕获组吗?如果是这样,为什么不捕获倒数第四组数字?

    【讨论】:

    • 蒂姆,老实说,我不确定,因为我没有写这个正则表达式。我对正则表达式还是很陌生。如果您看到更好的写作方式,我愿意接受建议。
    • 蒂姆,无论我在那个位置是否有字母,您的示例都适用于两个字符串。谢谢。
    【解决方案2】:

    您可以通过在其后添加? 来使单个字母可选:

    ([A-Z]{1}?)
    

    量词{1} 是多余的,因此您可以删除它。

    【讨论】:

    • 感谢 codeaddict。问号是否代替了`+.*? +`?
    • 当使用 grep 正则表达式时,如果你删除 {1} 会出现错误(grep:lookbehind assertion is not fixed length)。所以这是一个把它留在里面的情况。
    【解决方案3】:

    您也必须将单个字母标记为可选:

    ([A-Z]{1})? +.*? +
    

    或将整个部分设为可选

    (([A-Z]{1}) +.*? +)?
    

    【讨论】:

    • Stefan,我想让这封信完全是可选的。我尝试了这两种方法,但仍然没有匹配。我确定我弄错了。您能否修改您的示例以将其包含在字符串中?
    【解决方案4】:

    您还可以使用为您的情况设计的更简单的正则表达式,例如 (.*)\/(([^\?\n\r])*) 其中 $2 匹配您想要的。

    【讨论】:

      【解决方案5】:

      这里是密码的正则表达式,至少需要 8 个字符,包括数字和大小写字母以及可选的特殊字符

      /((?=.\d)(?=.[az])(?=.*[AZ])(?![~@#$%^&*_- +=`|{}:;!.?"()[]]).{8,25})/

      /((?=.*\d)(?=.*[a-z])(?=.*[A-Z])(?![~@#\$%\^&\*_\-\+=`|{}:;!\.\?\"()\[\]]).{8,25})/
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多