我有一个正则表达式,我认为是正确的工作,直到现在。我需要匹配一个可选的字符。它可能在那里,也可能不在。
这里有两个字符串。上面的字符串匹配,下面的字符串不匹配。在较低的字符串中缺少一个字母是导致它失败的原因。
我想在开始的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})/
Use
[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个独立的捕捉组吗?如果是的话,为什么不捕捉第四组到最后一组数字呢?
Use
[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个独立的捕捉组吗?如果是的话,为什么不捕捉第四组到最后一组数字呢?