使用带有“?”的正则表达式无法匹配字符串

时间:2014-02-25 22:56:49

标签: c# regex

我需要构建正则表达式以匹配以下字符串:

  1. CCN
  2. CreditCardNum
  3. CreditCardNUmber
  4. CCNumber
  5. 我按如下方式构建:C(redit)?C(ard)?N(um|umber)?
    它与“ CreditCardNumber ”字符串不匹配 我也尝试过:C(redit)?C(ard)?N(:?um|umber)没有成功

2 个答案:

答案 0 :(得分:7)

您的模式很好,您需要添加的是:(?i)在开头

正则表达式选项中的

或IgnoreCase。 RegexOptions.IgnoreCase

注意:由于您不需要捕获“redit”或“ard”,因此非捕获组(?:...)更好:

(?i)C(?:redit)?C(?:ard)?N(?:um(?:ber)?)?

如果你想对案件有更多控制权:

C(?i:redit)?C(?i:ard)?N(?i:um(?:ber)?)?

为了更加安全,您可以在模式的开头和结尾添加单词边界\b

答案 1 :(得分:2)

尝试

(?i)C(?:redit)?C(?:ard)?N(?:um(?:ber)?)?

(?i)是为了让你的正则表达式不敏感。