如何在正则表达式的字符串末尾两个字母?

时间:2017-06-06 08:22:41

标签: c# regex asp.net-mvc

我有以下模式:

^(01|04|05|06|PP|PPC)[0-9]*$

如果字符串以PP开头并以数字结尾,则此方法有效。

如何在最后允许UK?我想匹配一个字符串,如:PPC12345678UK

3 个答案:

答案 0 :(得分:2)

^(01|04|05|06|PP|PPC)[0-9]*(UK)?$

在正则表达式? means "0 or 1"中,即它等同于编写{0,1}。它使属性“可选”。

因此,上面的正则表达式将匹配字符串:

  

PP23462937

     

PPC328472936UK

匹配字符串:

  

01937492384U

     

068203472K

答案 1 :(得分:1)

最佳做法是在正则表达式中为可选的序列原子使用可选的 - 捕获组。此外,当使用交替组时,最好确保每个分支(| - 分开)在同一位置不匹配。

所以,我建议:

^(?:0[1456]|PPC?)[0-9]*(?:UK)?$

<强>详情:

  • ^ - 字符串的开头
  • (?:0[1456]|PPC?) - 两种选择中的任何一种:
    • 0[1456] - 0后跟1456
    • | - 或
    • PPC? - PPPPC
  • [0-9]* - 零个或多个数字
  • (?:UK)? - 选项UK substring
  • $ - 字符串结束。

请参阅[Ref].NET regex demo

这是正则表达式图:enter image description here

答案 2 :(得分:0)

最后添加英国 ^(01|04|05|06|PP|PPC)[0-9]*UK$

或者,正如@Tom Lord刚回应,带问号可选: ^(01|04|05|06|PP|PPC)[0-9]*(UK)?$

如果您不想在最后使用(?:)非捕获组捕获英国:^(01|04|05|06|PP|PPC)[0-9]*(?:UK)?$