我有两个字符串列表:可接受的邮政信箱变化和不可接受的邮政信箱变化。
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);
}
一个例子是:
我如何构建此正则表达式的“模式”?
(我在C#编码。)
答案 0 :(得分:0)
这种正则表达式是您正在寻找(PO Box |POST OFFICE BOX )\S*
的内容,如java示例所示。
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;
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。
正则表达式分两个阶段进行:
如果您只想要字母或数字,您可以使用\ w *而不是\ S *或\ d *仅用于数字。 Java实现目前不区分大小写,但c#不是这样做而是声明你的正则表达式而不是new Regex(@"PO Box \S*", RegexOptions.IgnoreCase)
。
如果您在列表中存储了许多不同的有效邮政信箱部件,并且您知道下一部分始终是数字,那么您可以使用此正则表达式([a-zA-z]+\s{1})+
来匹配数字的任何单词然后测试inf他们在您的有效清单。在运行正则表达式时使用valid.Contains(匹配)和Match
而不是IsMatch
。