C# Regexs拆分地址并返回特定部分
我在寻找C#的正则表达式,将地址分解为特定的部分,并返回这些部分,根据模式进行拆分 单位编号可以定义为数字和单个字母的任意组合,或数字、空格和单个字母的任意组合 i、 e.2a、328b、32C均为单元编号 如果我有地址——例如 我想要正则表达式,它允许我返回单元号最后一个实例的所有内容 第32单元a 或之后的所有内容,但不包括单元号的最后一个实例 约翰逊维尔史密斯新月酒店 另一个(不现实的)例子: 我希望能够获得以下任何一项:C# Regexs拆分地址并返回特定部分,c#,regex,C#,Regex,我在寻找C#的正则表达式,将地址分解为特定的部分,并返回这些部分,根据模式进行拆分 单位编号可以定义为数字和单个字母的任意组合,或数字、空格和单个字母的任意组合 i、 e.2a、328b、32C均为单元编号 如果我有地址——例如 我想要正则表达式,它允许我返回单元号最后一个实例的所有内容 第32单元a 或之后的所有内容,但不包括单元号的最后一个实例 约翰逊维尔史密斯新月酒店 另一个(不现实的)例子: 我希望能够获得以下任何一项: unit 32a Smith 3 d 或 i、 e.我想匹配以下
unit 32a Smith 3 d
或
i、 e.我想匹配以下最后一个实例:
"[0-9][a-z] " or "[0-9] [a-z] "
我试过:
var beforePattern = "^.*[0-9][a-z] ";
var beforepatternSpace = "^.*[0-9] [a-z] ";
var afterPattern = "[0-9][a-z] (.*)";
var afterPatternSpace = "[0-9] [a-z] (.*)";
但是,after模式包括匹配字符串。此外,我不确定如何确定应该使用哪个赛前/赛后(除了说最长的“before”或最短的“after”必须有效)我会在C中使用这个#
第一组和第二组现在有你想要的
在两个样本上都进行了测试。如果某些情况不是预期的,请提供更多示例
一些C#代码
var regex=new regex((?*\d+\s?\w+\s)(?*);
var match=regex.match(输入);
var beforeString=match[“在”]之前。值;
var-afterString=match[“在”]之后。值;
由于regex将尽可能匹配,这将找到您要查找的内容,希望您在加拿大埃德蒙顿没有任何地址。所有的街道名称都是数字。因此,某人的地址可能看起来像123 121 St.W.这可能是一个很难用正则表达式解决的问题,因为有许多不同的地址书写方式,没有人遵循任何标准。
Crescent, Johnsonville
"[0-9][a-z] " or "[0-9] [a-z] "
var beforePattern = "^.*[0-9][a-z] ";
var beforepatternSpace = "^.*[0-9] [a-z] ";
var afterPattern = "[0-9][a-z] (.*)";
var afterPatternSpace = "[0-9] [a-z] (.*)";
(.*\d\s*[a-z])\s*(.*)
var match = Regex.Match("unit 32a Smith 3 d Crescent, Johnsonville", @"(.*\d\s*[a-z])\s*(.*)");
var part1 = match.Groups[1].Value;
var part2 = match.Groups[2].Value;
var regex = new Regex( "(?<before>.*\d+\s?\w+\s)(?<after>.*)" );
var match = regex.Match( input );
var beforeString = match["before"].Value;
var afterString = match["after"].Value;