PO Box RegEx在字符串的开头

时间:2013-09-05 19:14:53

标签: c# regex

我环顾这个网站寻找一个好的PO Box正则表达式并没有找到任何我喜欢或一直工作的东西,所以我试着自己动手......我感觉很好,但是我我相信这里的善良人士可以在其中挖出一些漏洞:)所以......你对此有什么问题以及你能想到的假阳性/假阴性是什么?

我可以看到的一个警告是PO Box模式必须位于字符串的开头,但还有什么问题呢?

public bool AddressContainsPOB(string Addr)
{
    string input = Addr.Trim().ToLower();
    bool Result = false;

    Regex regexObj1 = new Regex(@"^p(ost){0,1}(\.){0,1}(\s){0,2}o(ffice){0,1}(\.){0,1}((\s){1}|b{1}|[1-9]{1})");
    Regex regexObj2 = new Regex(@"^pob((\s){1}|[0-9]{1})");
    Regex regexObj3 = new Regex(@"^box((\s){1}|[0-9]{1})");

    Match match1 = regexObj1.Match(input);
    if (match1.Success)
    { Result = true; }
    Match match2 = regexObj2.Match(input);
    if (match2.Success)
    { Result = true; }
    Match match3 = regexObj3.Match(input);
    if (match3.Success)
    { Result = true; }
    return Result;
}

1 个答案:

答案 0 :(得分:1)

您对我们的期望是什么?你甚至没有给我们有效/无效的字符串。你有没有以某种方式测试你的正则表达式?

乍一看,我不知道有关有效输入的内容是:

  1. 我可以看到的一个警告是,邮政信箱模式必须位于字符串的开头

    您是否只想在字符串的开头匹配它?您需要知道并在模式中定义它。如果您不想,请删除字符串锚^的开头,并将其替换为word boundary \b

  2. {1}是多余的,您可以将其删除。

  3. 对于{0,1},有一个简短形式?,我更喜欢这个,因为它更短。

  4. ^box((\s){1}|[0-9]{1})匹配“box”后跟空格或后跟数字。这真的是你想要匹配的吗?

  5. 第一个正则表达式中的
  6. (\.):为什么要对一个点进行分组?