适用于可接受和不可接受的“邮政信箱”地址的正则表达式

时间:2016-10-20 16:07:32

标签: c# regex

我有两个字符串列表:可接受的邮政信箱变化和不可接受的邮政信箱变化。

List<string> validPOBox = new List<string>() { "PO BOX", "POST OFFICE BOX", "etc..."}
List<string> invalidPOBox = new List<string>() { "P. BX", "PO BX", "etc..."}

我想我需要循环遍历每个列表并使用Regex执行类似的操作以查看是否存在匹配:

private bool IsPOBoxRegexMatch(string addressLine, string poBoxLine)
{
    string pattern = string.Format("{0}{1}{2}", "Something", poBoxLine, "SomethingElse");
    Regex regex = new Regex(pattern);

    return regex.IsMatch(addressLine);
}

一个例子是:

  • 邮政信箱123 =有效
  • PO BX 123 =无效

我如何构建此正则表达式的“模式”?

(我在C#编码。)

1 个答案:

答案 0 :(得分:0)

这种正则表达式是您正在寻找(PO Box |POST OFFICE BOX )\S*的内容,如java示例所示。

&#13;
&#13;
var value = "PO Box 123 ,PO Bx 123"

var matches = value.match(
     new RegExp("PO Box |POST OFFICE BOX )\\S*", "gi")
);

document.writeln(matches);
&#13;
&#13;
&#13;

string text = "PO Box 123";
Regex regex = new Regex(@"(PO Box |POST OFFICE BOX)\S*");

var matches = regex.IsMatch(text);
Console.WriteLine(matches);

如果可以找到一个字符串的正则表达式匹配,那么在c#中应该返回一个bool。

正则表达式分两个阶段进行:

  1. 首先匹配&#34;(邮政信箱|邮局办公箱)&#34;使用&#34; PO BOX&#34;或者&#34; POST OFFICE BOX&#34;
  2. 然后使用\ S *
  3. 匹配尽可能多的0-n次匹配的任何非空白字符

    如果您只想要字母或数字,您可以使用\ w *而不是\ S *或\ d *仅用于数字。 Java实现目前不区分大小写,但c#不是这样做而是声明你的正则表达式而不是new Regex(@"PO Box \S*", RegexOptions.IgnoreCase)

    如果您在列表中存储了许多不同的有效邮政信箱部件,并且您知道下一部分始终是数字,那么您可以使用此正则表达式([a-zA-z]+\s{1})+来匹配数字的任何单词然后测试inf他们在您的有效清单。在运行正则表达式时使用valid.Contains(匹配)和Match而不是IsMatch